MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   MATLAB论坛 (https://www.labfans.com/bbs/forumdisplay.php?f=6)
-   -   版主 一个简单的问题 (https://www.labfans.com/bbs/showthread.php?t=3691)

nospecial 2008-06-22 21:25

版主 一个简单的问题
 
[SIZE="6"][/SIZE]
我是一个MATLAB的初学者,昨天老师留了个实验,用matlab求一个系统传递函数的未知参数.下面是我想的框架.主要的不是求解的原理问题,就是程序的可行性,有些注释,希望给些指点.

syms s
y=ilaplace(0.35/((s+0.5)*(s+0.7)));
for t=0:3
g(t)=y;
end /*t=0到3 时,将Y的值赋予g(t)*/

A=[g(1),g(2);g(2),g(3)]; /*方程组-g(0)=a1*g(1)+a2*g(2) ;-g(1)=a1*g(2)+a2*g(3)求a1.a2 */
B=[-g(0),-g(1)];
C=[a1,a2];
C=B/A; /*求出a1,a2 */
x=solve('1+ai*x+a2*x^2') /*1+ai*x+a2*x^2=0 的根*/
s1=log(x1);
s2=log(x2);
D=[1,1;exp(s1),exp(s2)];
E=[g(0),g(1)];
F=[c1,c2];
F=E/F; /*求出c1,c2*/

fanxing39 2008-06-23 18:10

[SIZE="4"]程序的问题还是挺多的,你的y 还想是在做 拉式变换哦

错误:1. g(t) 你是从0开始取的,这是不对的,向量的第一个位置对应的是1,不是0
2. C=[a1,a2],直接删除,虽然能明白你的意思,但是不是这么用的,把这个删除了,再把下面的程序 C=B/A 改为 [a1,a2]=B/A ,就可以了。
3. 你的a1求出来是 -1, a2=0,那么解那个方程组的时候 只能得到一个解,不会有两个解
[/SIZE]

fanxing39 2008-06-23 18:55

[COLOR="Red"]x=solve('1+ai*x+a2*x^2')[/COLOR]
[SIZE="4"]这个程序,如果这么写的话 a1,a2 都是字母串,而不是数值
所以应该改为:
syms x
f=@(a1,a2) 1+a1*x+a2*x^2;
X=solve(f(a1,a2));
就可以了[/SIZE]
不过方程只有1个解,你想得到2个解,那你的问题是不是哪里弄错了呢?


所有时间均为北京时间。现在的时间是 14:35

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.