
首先,你的文件名不能是pid.m,路径也不察棚能含有pid这种matlab内置的关键字。
其次,有两行错误,建议注释掉,对你的结果没影响,因为你没有使用这个数据。
具体正确的代码如下:
clc
clear
kp1=0.6
kp2=0.6
kp3=1.0
ki1=0.8
ki2=0.8
ki3=0.8
kd1=0.2
kd2=0.2
kd3=0.4
e1(1)=0
e2(1)=0
e3(1)=0
u_1=[0 0 0]'
xeta=[1 0 1 0 1 0]'
ts=0.01
for i=2:1000
yd(i)=2*sin(i*ts)
time(i)=i*ts
tspan=[0 ts]
para=u_1
[tt,xx]=ode45('pid_modle',tspan,xeta,[],para)
xeta=xx(length(xx),:)
fai(i)=xeta(1)
theta(i)=xeta(3)
pai(i)=xeta(5)
e1(i)=fai(i)-yd(i)
e2(i)=theta(i)-yd(i)
e3(i)=pai(i)-yd(i)
u1(i)=kp1*e1(i)+ki1*(e1(i)+e1(i-1)*ts)+kd1*(e1(i)-e1(i-1))/ts
u2(i)=kp2*e2(i)+ki2*(e2(i)+e2(i-1)*ts)+kd2*(e2(i)-e2(i-1))/ts
u3(i)=kp3*e3(i)+ki3*(e3(i)+e3(i-1)*ts)+kd3*(e3(i)-e3(i-1))/ts
% 败塌则 u(i)=[u1(i) u2(i) u3(i)]'
% u_1=u(i)
end
% figure 1
plot(time,fai,'-',time,theta,'-.',time,pai,'.',time,yd)
那个函数文件不变,没有错误。
运行结衫缓果如下:
希望采纳,设置为满意答案,谢谢。
function[n,x]=sor22(a,b,x,nm,w,ww)
%输入:a为方程组的系数矩阵,b为方程组右端的列向量,x为迭代初值构成的列向量,nm为最大迭代隐乱次数,w为误差精度,ww为松弛因子
%输出:x为求得的方程组的解构成的列向量,n为迭代次数
n=1
m=length(a)
d=diag(diag(a))
%令a=d-l-u,计算矩阵d
l=tril(-a)+d
%令a=d-l-u,计算矩阵l
u=triu(-a)+d
%令a=d-l-u,计算矩阵u
m=inv(d-ww*l)*((1-ww)*d+ww*u)
%计算迭代矩阵
g=ww*inv(d-ww*l)*b
%计算槐绝迭灶明档代格式中的常数项
%下面是迭代过程
while
n<=nm
x=m*x+g
%用迭代格式进行迭代
if
norm(x-x,'inf')
评论
0
0
加载更多
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)