用matlab解方程求matlab代码.
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/23 23:08:48
用matlab解方程
求matlab代码.
求matlab代码.
参考代码:
>> syms w kc real
>> Tjw = 7.8*kc/(7.8*kc-0.11*w^2+j*w);
>> solve(abs(Tjw)-sqrt(sym(1)/2),w)
ans =
2/11*(-1250+2145*kc+5*(-214500*kc+62500+368082*abs(kc)^2)^(1/2))^(1/2)
-2/11*(-1250+2145*kc+5*(-214500*kc+62500+368082*abs(kc)^2)^(1/2))^(1/2)
2/11*(-1250+2145*kc-5*(-214500*kc+62500+368082*abs(kc)^2)^(1/2))^(1/2)
-2/11*(-1250+2145*kc-5*(-214500*kc+62500+368082*abs(kc)^2)^(1/2))^(1/2)
求出的四个根中,在kc>0的条件下,后两个为复数,第二个为负数,所以有效解其实只有第一个.
再问: 如图。。。
再答: 1、代码肯定没错,在6.5和7.5(R2007b)上实测没问题,我贴出的是程序的实际运行结果。你之所以遇到问题,有可能是符号运算内核的影响。MATLAB 2007b之前用的是Maple内核,而2008a之后换成了MuPad内核。大多数人的观点是,Maple总体上优于MuPad。 2、【在前面给kc赋值】是什么概念?>> syms w kc real
>> kc=0.4;
>> Tjw = 7.8*kc/(7.8*kc-0.11*w^2+j*w);
>> solve(abs(Tjw)-sqrt(sym(1)/2),w)
ans =
-2/11*i*(392+2*222457^(1/2))^(1/2)
2/11*i*(392+2*222457^(1/2))^(1/2)
-2/11*(-392+2*222457^(1/2))^(1/2)
2/11*(-392+2*222457^(1/2))^(1/2)结果里很明显没有kc。 3、你确定你求出的w正确?我得到的结果和你不同:>> syms w kc real
>> Tjw = 7.8*kc/(7.8*kc-0.11*w^2+j*w);
>> w=solve(abs(Tjw)-sqrt(sym(1)/2),w);
>> w1=w(1);
>> subs(w1,[0.4 0.6])
ans =
4.2691 6.6171
再问: 如图。。。
再答: 1、首先应该明确,你的版本里solve函数肯定也可以对符号量直接求解的,并非如你所说的那样,只能接受字符串参数。 两种调用方式存在一个很重要的差别,就是变量的值能否起作用。在你上面贴出的第一和第三个solve之所以不能得到你期望的结果,就是这个原因。例如第一个solve,字符串表达式里面的T其实和上面变量T没有任何关系,当然也就不可能求出w来。第三个也类似,kc的值根本没起到作用。 2、我在多个版本上做了测试,的确和我之前的猜测一样,是由于符号运算内核导致的。Maple内核(如6.5、2007b)用我给的代码可以很容易求出来,而MuPad内核则表现各异:2010a和你遇到的现象差不多,运行好长时间,占用大量内存,最终因内存不足而失败;2014a可以求出两个根,代入数据后可知是虚根。 3、如果换一种思路求解,例如用syms w kc real
Tjw = 7.8*kc/(7.8*kc-0.11*w^2+j*w);
w=solve(Tjw*Tjw'-sym(1)/2,w)
subs(w,[0.4 0.6])在Maple内核的版本上可以正确求解,速度很快,占用内存也很少;而Maple内核的情况是,2008b和2014a都能求解,但求出的只有两个虚根(代入kc=0.4、0.6后)。 再换一种做法,把方程换成w=solve(abs(Tjw)^2-sym(1)/2,w)Maple内核可以得到正确结果,而MuPad内核得到的仍然是虚根。 综上所述,MATLAB符号运算的两种内核,Maple总体上优于MuPad(尤其对于涉及到开方的表达式),如果用到符号运算,建议最好使用早期使用Maple内核的版本(2008a或更早)。
>> syms w kc real
>> Tjw = 7.8*kc/(7.8*kc-0.11*w^2+j*w);
>> solve(abs(Tjw)-sqrt(sym(1)/2),w)
ans =
2/11*(-1250+2145*kc+5*(-214500*kc+62500+368082*abs(kc)^2)^(1/2))^(1/2)
-2/11*(-1250+2145*kc+5*(-214500*kc+62500+368082*abs(kc)^2)^(1/2))^(1/2)
2/11*(-1250+2145*kc-5*(-214500*kc+62500+368082*abs(kc)^2)^(1/2))^(1/2)
-2/11*(-1250+2145*kc-5*(-214500*kc+62500+368082*abs(kc)^2)^(1/2))^(1/2)
求出的四个根中,在kc>0的条件下,后两个为复数,第二个为负数,所以有效解其实只有第一个.
再问: 如图。。。
再答: 1、代码肯定没错,在6.5和7.5(R2007b)上实测没问题,我贴出的是程序的实际运行结果。你之所以遇到问题,有可能是符号运算内核的影响。MATLAB 2007b之前用的是Maple内核,而2008a之后换成了MuPad内核。大多数人的观点是,Maple总体上优于MuPad。 2、【在前面给kc赋值】是什么概念?>> syms w kc real
>> kc=0.4;
>> Tjw = 7.8*kc/(7.8*kc-0.11*w^2+j*w);
>> solve(abs(Tjw)-sqrt(sym(1)/2),w)
ans =
-2/11*i*(392+2*222457^(1/2))^(1/2)
2/11*i*(392+2*222457^(1/2))^(1/2)
-2/11*(-392+2*222457^(1/2))^(1/2)
2/11*(-392+2*222457^(1/2))^(1/2)结果里很明显没有kc。 3、你确定你求出的w正确?我得到的结果和你不同:>> syms w kc real
>> Tjw = 7.8*kc/(7.8*kc-0.11*w^2+j*w);
>> w=solve(abs(Tjw)-sqrt(sym(1)/2),w);
>> w1=w(1);
>> subs(w1,[0.4 0.6])
ans =
4.2691 6.6171
再问: 如图。。。
再答: 1、首先应该明确,你的版本里solve函数肯定也可以对符号量直接求解的,并非如你所说的那样,只能接受字符串参数。 两种调用方式存在一个很重要的差别,就是变量的值能否起作用。在你上面贴出的第一和第三个solve之所以不能得到你期望的结果,就是这个原因。例如第一个solve,字符串表达式里面的T其实和上面变量T没有任何关系,当然也就不可能求出w来。第三个也类似,kc的值根本没起到作用。 2、我在多个版本上做了测试,的确和我之前的猜测一样,是由于符号运算内核导致的。Maple内核(如6.5、2007b)用我给的代码可以很容易求出来,而MuPad内核则表现各异:2010a和你遇到的现象差不多,运行好长时间,占用大量内存,最终因内存不足而失败;2014a可以求出两个根,代入数据后可知是虚根。 3、如果换一种思路求解,例如用syms w kc real
Tjw = 7.8*kc/(7.8*kc-0.11*w^2+j*w);
w=solve(Tjw*Tjw'-sym(1)/2,w)
subs(w,[0.4 0.6])在Maple内核的版本上可以正确求解,速度很快,占用内存也很少;而Maple内核的情况是,2008b和2014a都能求解,但求出的只有两个虚根(代入kc=0.4、0.6后)。 再换一种做法,把方程换成w=solve(abs(Tjw)^2-sym(1)/2,w)Maple内核可以得到正确结果,而MuPad内核得到的仍然是虚根。 综上所述,MATLAB符号运算的两种内核,Maple总体上优于MuPad(尤其对于涉及到开方的表达式),如果用到符号运算,建议最好使用早期使用Maple内核的版本(2008a或更早)。