Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab求符号函数的零点_Matlab_Function_Zero_Polynomials - Fatal编程技术网

Matlab求符号函数的零点

Matlab求符号函数的零点,matlab,function,zero,polynomials,Matlab,Function,Zero,Polynomials,我有一个符号函数,我特别想知道它的零点。我在谷歌上搜索过,试图找到与我的查询相关的东西,但没有成功 谁能帮帮我吗 编辑: 我得到的问题是S是一个包含虚数的向量。我希望得到一个实数,因为我正在计算一个时间 以下是我尝试做的一些背景知识: 在给定的链接中,是针对特定一维情况求解的热方程。我相信,满足规定边界和初始条件的温度分布在第50页给出 我想做的是找到一维物体与环境平衡的时间,它保持在T=0的恒定温度下。据我所知,最简单的方法是使用指数函数的泰勒展开式,只使用前几个项,因为我预计平衡时间相对较

我有一个符号函数,我特别想知道它的零点。我在谷歌上搜索过,试图找到与我的查询相关的东西,但没有成功

谁能帮帮我吗

编辑:

我得到的问题是S是一个包含虚数的向量。我希望得到一个实数,因为我正在计算一个时间

以下是我尝试做的一些背景知识:

在给定的链接中,是针对特定一维情况求解的热方程。我相信,满足规定边界和初始条件的温度分布在第50页给出

我想做的是找到一维物体与环境平衡的时间,它保持在T=0的恒定温度下。据我所知,最简单的方法是使用指数函数的泰勒展开式,只使用前几个项,因为我预计平衡时间相对较短;然后对正弦函数使用小角度近似,因为杆的长度相对较小。就这样,我做了一个for循环来生成术语,就像求和函数一样——正如你所看到的,我使用了1000个术语


有人觉得我做的不对吗?如果有更好的方法,有人可以推荐吗?

假设你有一个x或y的多项式或三角函数,你所说的“零”是指函数穿过轴的值,即x或y为零,当变量为0时,你可以调用函数的值。例如:

syms x y
f=-cos(x)*exp(-(x^2)/40);
ezsurf(f,[-10,10])

F=matlabFunction(f,'vars',{[x]});
F([0])
ezsurf只是将情节可视化。如果您想要x和y的函数,可以执行以下操作:

syms x y
f=-cos(x)*cos(y)*exp(-(x^2+y^2)/40);
ezsurf(f,[-10,10])

F=matlabFunction(f,'vars',{[x,y]});
for y=0
    solve(f)
end

这将为您提供函数值,其中x的整数倍对应于y的零点(y=0平面上的函数值)。

如果至少有一个根是实的和正的,对应于您的时间,那么您看到虚根就不会感到惊讶。问题是,由于您所做的近似计算,时间是否有意义。你有没有画出实际函数的曲线,以获得零点位置的粗略近似值

我真的无法对你试图解决的特定问题发表评论。您需要确保使用了足够的泰勒展开项,以确保它们对域是准确的。您是否尝试过在
exp
和/或
sin
中离开?有什么理由不能直接使用零吗?你有没有检查过你的总和在1000项之后收敛?或者,它会聚得更快还是根本不会

主要的问题是你为什么要用符号数学来解决这个问题?这似乎是一个数字问题,除非在求和时遇到溢出/下溢问题。在这种情况下,您可以使用以下方法找到零:

N = 32;  % Number of terms in summation
x = 1.5;
T_EQ = 1e-5;
n = (2*(0:N)+1)*pi;
T = @(t)sum((72./n.^3).*exp(-n.^2*t/45).*sin(n*x/3))-T_EQ;
S = fzero(T,[0 1e3]) % Bounds around a root guarantees solution if function monotonic
返回

S =

  56.333877640358708
如果要使用
solve
,我将执行以下操作以避免
for
循环:

syms t
N = 32;
x = 1.5;
T_EQ = 1e-5;
n = (2*sym(0:N)+1)*sym(pi);
T(t) = sum((72./n.^3).*exp(-n.^2*t/45).*sin(n*x/3));
S = double(solve(T-T_EQ==0,t))
或者,使用:


最后,你的符号解甚至不是精确的,因为你的
pi
变量被转换成有理近似
pi
是浮点。如果
t
是符号的,那么像
pi*t
这样的东西通常是安全的,因为
pi
将被识别为符号。但是,
pi^2
在转换为符号之前是以浮点计算的,这是由操作顺序决定的。一般来说,您应该在符号表达式中使用
sym('pi')
sym(pi)

最通用的答案是。假设你指的是多项式,你是对一个零感兴趣,对一个范围内的零感兴趣,还是对所有的零感兴趣?另外,你有什么版本的Matlab?另外,多项式的系数是数字还是变量?我假设这是一个标准的单变量多项式(即,只是
x
的函数)还是多变量的?@horchler我更新了我的帖子,提供了更多信息。如果你能看一下,我会很感激的。
syms t
N = 32;
x = 1.5;
T_EQ = 1e-5;
n = (2*sym(0:N)+1)*sym(pi);
T(t) = sum((72./n.^3).*exp(-n.^2*t/45).*sin(n*x/3));
S = double(solve(T-T_EQ==0,t))
syms n t
N = 32;
x = 1.5;
T_EQ = 1e-5;
T(t) = symsum((72/(pi*(2*n+1))^3)*exp(-(pi*(2*n+1))^2*t/45)*sin(pi*(2*n+1)*x/3),n,0,N);
S = double(solve(T-T_EQ==0,t))