求助:solve函数求解方程
本帖最后由 star19831106 于 2011-5-26 16:51 编辑已知:
k1=-1.1;k2=8.72;k3=34.272;k4=26.7328; xp>-2
求解方程
k1*ts+1/2*k2*ts^2+1/6*k3*ts^3+1/24*k4*ts^4=xp
我首先将xp离散成若干值
比如
xp=-2:5;
或者
xp=-1:4;
然后编制如下程序进行计算
clc;clear;
xp=-1:1:3;%xp的值大于-2就可以
np=length(xp);
%-----------
k1=-1.1;k2=8.72;k3=34.272;k4=26.7328;
%------------
syms ts;
%------------
kts=k1*ts+1/2*k2*ts^2+1/6*k3*ts^3+1/24*k4*ts^4;
Dkts=diff(kts,ts);
%------------
for i=1:np
fts=Dkts-xp(i);
t0=double(eval(solve(fts,ts)))
end
但是无论xp的值取为:
xp=-2:5;
还是
xp=-1:4;
或者其他的值
解出来的第一个t0值都是复数值(其实应该是实数值)
请问为什么无论xp如何取值解出来的第一个t0值都会是复数呢?
是程序编错了吗?
谢谢!!
本帖最后由 nwcwww 于 2011-5-25 23:57 编辑
在MATLAB MUPAD里算出来三个实根:
直接在命令行里也一样:
syms t;
f=(8354*t^3)/1875 + (2142*t^2)/125 + (218*t)/25 + 9/10;
s=solve(f,t);
double(s)
ans =
-0.1407
-3.2657
-0.4397 十分感谢您的帮助。
我复制了一下您的代码
结果是
ans =
-0.1407
-3.2657 - 0.0000i
-0.4397 + 0.0000i
虽然3个都是实数解,但是后两个却表现为虚部为零的复数。
用isreal()函数识别不出来。继续请教这是什么原因。谢谢! 分别判断请用isreal和arrayfun函数 继续求助,请高手帮忙分析。
谢谢!! 应该是计算精度的问题吧,你就用下面这三个解吧
ans =
-0.1407
-3.2657
-0.4397 谢谢qibbxxt 斑竹和messenger总斑竹 的帮助。
我是要求一组方程的解
不是单单要求一个方程的解
我遇到的问题是一楼的代码中
第一个方程的解总是复数
取xp=-1:1:3时,第一个方程的解为复数,其余为实数
取xp=-2:1:3时,也是第一个方程的解为复数,其余为实数。
不知道是什么原因。
谢谢!
页:
[1]