代码是
syms x;
v = @(x) (4 - x^2)^(1/2) - (2 - x)^(1/2)*(x + 2)^(1/2);
ezplot(v(x),[-2,2]);
这产生了一个情节
对于 [-2,2] 中的每个 x,v(x) 不应该为零吗?
代码是
syms x;
v = @(x) (4 - x^2)^(1/2) - (2 - x)^(1/2)*(x + 2)^(1/2);
ezplot(v(x),[-2,2]);
这产生了一个情节
对于 [-2,2] 中的每个 x,v(x) 不应该为零吗?
if
如果想法是将方程输出中的“小”值替换为零,则需要对输出数据设置某种条件。不幸的是,您不能if
向匿名函数添加一个,但您可以做以下两件事之一:定义一个标准函数(在程序文件中)或将您的匿名函数包装在另一个函数中。第一种方法更直接:
function [y] = v_func(x)
y = (4 - x.^2).^(1/2) - (2 - x).^(1/2).*(x + 2).^(1/2);
y(abs(y)<1e-10)=0;
end
上面执行与之前相同的计算,第二行代码将所有小于某个容差 (1e-10) 的值替换为零。请注意方程式与原始方程式有何不同。它已被“向量化”(请参阅句点的使用)以允许评估输入向量,而不必遍历向量中的每个元素。另请注意,当我们将它传递给时,ezplot
我们必须在函数名称前加上 & 符号:
ezplot(@v_func,[-2,2]);
第二种方法需要将您的第一个匿名函数包装v
在其他几个函数中(请参阅匿名函数和条件)。我们从已矢量化的原始函数开始:
v = @(x) (4 - x.^2).^(1/2) - (2 - x).^(1/2).*(x + 2).^(1/2);
和一个(条件)函数,用零替换所有小于某个容差的值:
cond = @(y)(y*(1-(abs(y)<1e-10)))
然后我们将两者包装在一起
func = @(x)cond(v(x))
以便条件函数评估 的输出v
。把它放在一起ezplot
给出:
ezplot(func,[-2,2]);
如图所示,所有输出都应为零。
图形标题将不是您想要的,因此可以将其替换为以下变体:
plotTitle = func2str(v);
title(strrep(plotTitle(5:end),'.','')); % as I don't want '@(x)' or periods to
% appear in the title
我忽略了使用,sym
因为我没有符号工具箱。