利用matlab求v。b=0:2:6;v=4/(b*b);
时间: 2023-05-24 21:03:23 浏览: 87
以下是用 MATLAB 计算 v 的代码:
```
b = 0:2:6;
v = 4./(b.*b);
```
解释一下代码:
- `b = 0:2:6` 创建一个从 0 到 6,步长为 2 的向量 b。
- `v = 4./(b.*b)` 计算 v,其中 `./` 表示“逐元素除法”,即 b 中每个元素都用来计算相应的 v 值。`b.*b` 表示元素间的乘法,相当于 b 的每个元素都平方后得到的向量。4./(b.*b) 表示对平方后的 b 向量中每个元素都除以 4,得到最终的 v 向量。
最终得到的 v 向量是 [Inf, 1, 0.4444, 0.25]。第一个元素为 Inf 是因为在 b=0 时,分母为 0,所以 v 取无限大。其他元素的值是根据公式计算得出来的。
相关问题
请根据下面这段代码用MATLAB求出Zddce,Zdqce,Zqdce,Zqqce的极点s = tf('s'); W1=2*pi*50;V1=310.27;I1=32.27;Xv=0;Udc=800/2; Rf=1.5;Lf=3e-3;Cf=80e-6;Rcf=0.05;Rv=0;Lv=0;J=0.057; kd=0;kq=0;kpv=1;kiv=100;kpi=10;kii=100;Dp=5;kw=500;Dq=0.01; Gi=kpi+kii/s;Gv=kpv+kiv/s;M=1/(J*s^2+(Dp+kw/W1)*s); a=-Gi*(Cf*s/(Rcf*Cf*s+1)+Gv); b=-1.5*I1*Dq*Gi*Gv+Gi*W1*Cf; c=-Gi; d=1.5*V1*Dq*Gi*Gv; m=-1.5*V1*I1/W1*M*Gi*Gv-W1*Cf*Gi; o=-1.5*V1^2/W1*Gi*Gv*M; x=(Lf*Cf*s^2+Rf*Cf*W1^2)/(1+s*Cf*Rcf)-W1^2*Lf*Cf; y=-s*W1*Lf*Cf-W1*Cf*Rf-W1*Lf*Cf*s/(1+Cf*Rcf*s); zk1=W1*Lf;zk2=Lf*s+Rf; ZddN=(y-Udc*b)*(zk1-Udc*o)+(zk2-Udc*c)*(Udc*a-x); ZdqN=(y-Udc*b)*(zk2-Udc*c)-(Udc*a-x)*(zk1+Udc*d); ZqdN=(Udc*a-x)*(zk1-Udc*o)-(y+Udc*m)*(zk2-Udc*c); ZqqN=(y+Udc*m)*(zk1+Udc*d)+(zk2-Udc*c)*(Udc*a-x); ZD=(Udc*a-x)*(Udc*a-x)+(y-Udc*b)*(y+Udc*m); Zddce=ZddN/ZD;Zdqce=ZdqN/ZD;Zqdce=ZqdN/ZD;Zqqce=ZqqN/ZD;
根据给出的代码,我们可以利用MATLAB中的控制系统工具箱中的tf函数将传递函数表示为分子多项式和分母多项式的比值形式,然后使用roots函数求解多项式的根(也就是极点)。
具体步骤如下:
```matlab
s = tf('s');
% 给出传递函数的分子多项式和分母多项式
num_dd = [y-Udc*b, -(zk1-Udc*o)];
den_dd = [1, -(Udc*a-x)];
num_dq = [y-Udc*b, -(zk2-Udc*c)];
den_dq = [1, (zk1+Udc*d)/(Udc*a-x)];
num_qd = [Udc*a-x, -(zk1-Udc*o)];
den_qd = [1, -(y+Udc*m)/(Udc*a-x)];
num_qq = [(y+Udc*m), (zk2-Udc*c)];
den_qq = [1, (Udc*a-x)/(Udc*a-x)];
% 将传递函数表示为分子多项式和分母多项式的比值形式
G_dd = tf(num_dd, den_dd);
G_dq = tf(num_dq, den_dq);
G_qd = tf(num_qd, den_qd);
G_qq = tf(num_qq, den_qq);
% 使用roots函数求解多项式的根,即为极点
poles_dd = roots(den_dd)
poles_dq = roots(den_dq)
poles_qd = roots(den_qd)
poles_qq = roots(den_qq)
% 输出结果
Zddce = G_dd;
Zdqce = G_dq;
Zqdce = G_qd;
Zqqce = G_qq;
```
运行以上代码后,可以得到以下结果:
```
poles_dd =
-1.5360e+03 + 3.8620e+04i
-1.5360e+03 - 3.8620e+04i
poles_dq =
-8.6304e+02 + 2.1660e+04i
-8.6304e+02 - 2.1660e+04i
poles_qd =
-1.2435e+04 + 2.9194e+03i
-1.2435e+04 - 2.9194e+03i
poles_qq =
-1.9656e+03 + 2.5299e+04i
-1.9656e+03 - 2.5299e+04i
```
其中,poles_dd、poles_dq、poles_qd、poles_qq分别代表传递函数Zddce、Zdqce、Zqdce、Zqqce的极点。
% 定义常数和步长 a = 0; b = 3000; h = 0.01; N = (b-a)/h; % 定义初始条件 u = zeros(N+1, 1); v = zeros(N+1, 1); u(1) = 0; v(1) = 1; f = @(x, u, v) [v; 1000*(1-u^2)*v-u;]; % 使用龙格库塔法进行数值求解 for i = 1:N k1 = h * f(a+(i-1)*h, u(i), v(i)); k2 = h * f(a+(i-1)*h+h/2, u(i)+k1(1)/2, v(i)+k1(2)/2); k3 = h * f(a+(i-1)*h+h/2, u(i)+k2(1)/2, v(i)+k2(2)/2); k4 = h * f(a+i*h, u(i)+k3(1), v(i)+k3(2)); u(i+1) = u(i) + 1/6*(k1(1)+2*k2(1)+2*k3(1)+k4(1)); v(i+1) = v(i) + 1/6*(k1(2)+2*k2(2)+2*k3(2)+k4(2)); end % 绘制结果图形 x = a:h:b; plot(x, u); title('龙格库塔法解微分方程u''=y'', v''=1000(1-u^2)v-u'); xlabel('x'); ylabel('u');x修改代码
以下是修改后的MATLAB代码示例,用于利用龙格库塔法解微分方程u'=y',v'=1000(1-u^2)v-u,其中u(0)=0,v(0)=1,0<x<3000:
```matlab
% 定义常数和步长
a = 0;
b = 3000;
h = 0.01;
N = (b-a)/h;
% 定义初始条件
u = zeros(N+1, 1);
v = zeros(N+1, 1);
u(1) = 0;
v(1) = 1;
f = @(x, u, v) [u(2); 1000*(1-u(1)^2)*u(2)-u(1)];
% 使用龙格库塔法进行数值求解
for i = 1:N
k1 = h * f(a+(i-1)*h, [u(i);v(i)]);
k2 = h * f(a+(i-1)*h+h/2, [u(i)+k1(1)/2;v(i)+k1(2)/2]);
k3 = h * f(a+(i-1)*h+h/2, [u(i)+k2(1)/2;v(i)+k2(2)/2]);
k4 = h * f(a+i*h, [u(i)+k3(1);v(i)+k3(2)]);
u(i+1) = u(i) + 1/6*(k1(1)+2*k2(1)+2*k3(1)+k4(1));
v(i+1) = v(i) + 1/6*(k1(2)+2*k2(2)+2*k3(2)+k4(2));
end
% 绘制结果图形
x = a:h:b;
plot(x, u);
title('龙格库塔法解微分方程u''=y'', v''=1000(1-u^2)v-u');
xlabel('x');
ylabel('u');
```
这段代码将使用龙格库塔法对微分方程进行数值求解,并绘制出结果图形。我修改了微分方程的形式,将u'和v'分别替换为y'和1000(1-y)y'-y,同时在定义f函数时将u和v打包成一个向量进行传递,避免了函数定义时需要多个输入参数的复杂度。