matlab用solve解方程时,是可以与for循环套用的,每循环一次,解一个或一组方程。如:
x=-3:2:5;
m=length(x);
for k=1:m
syms b K
a=x(k);
s=a+b1i;
G=((2s^2+s+1)exp(-s))/(s^3+s^2+5s);
G1=imag(G);
G2=real(G);
s=sprintf('第%d次计算',k);
disp(s)
[K,b]=solve(1+KG2==0,G1==0,'K','b')
end
运行结果:
第1次计算
K =
010268582850871938239489373227825
b =
0
第2次计算
K =
091969860292860580398880942540365
b =
0
第3次计算
K =
-47569931998033291618805030748672
b =
0
第4次计算
K =
-46561926503753229763061591471985
b =
0
第5次计算
K =
-46379112219555188569098618762673
b =
0
错在这句,[c1,c2,c3]=solve('diff(N,c1)','diff(N,c2)','diff(N,c3)'),因为软件认为diff(N,c1)只是一个变量符号,所以造成程序出错。正确用法应该这样来处理,
eq1=diff(N,c1);eq2=diff(N,c2);eq3=diff(N,c3);
[c1,c2,c3]=solve(eq1,eq2,eq3)
经运行,得到结果是无解,即无解析解。
所以在这里用solve是不合适的,但可以用数值方法来求解。如拟牛顿法求解非线性方程
c1 = -1049030130
c2 =1057363644
c3 =5541813541
N=4865147
函数solve求解函数返回值的类型是Maybe Grid,具体包括两种情况,无解用Nothing表示,有解则是Just g,这里g的类型是Grid。出于本例的目的,这里只对是否有解感兴趣,而对解本身(Grid)不感兴趣。
anyhow, I got an anwser, as below
x =
(27313763081764851197485172598348e-22-30348625646405390219095387315146e-23i)((-46505726310086708110861031443676-51673029233429675678168208871408i)conj(-23479391587158800462451624083883e-5-26088212874620889402438133212685e-6i)+19068205386677863)
y =
-23479391587158800462451624083883e-5-26088212874620889402438133212685e-6i
可以用solve()函数来解决这个问题。执行步骤如下:
A=load('MC12-92txt');
x1=A(:,1),x2=A(:,2)
y1=A(:,3),y2=A(:,4)
z1=A(:,5),z2=A(:,6)
x3=A(:,7),z3=A(:,8)
syms a1 b1 c1 d1
eq1=x1+x2-(a1+b1)
eq2=y1+y2-c1
eq3=z1+z2-(d1+a1)
eq4=x3+z3-(a1+c1)
s=solve(eq1,eq2,eq3,eq4,'a1','b1','c1','d1')
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)