tiange 发表于 2007-5-13 15:59

我这个程序所在的错误我弄不明白,请大家指点

我要对一个悬臂梁振动前四阶振型进行求导,然后用matlab做出其图像,但是总是出现这个错误
的提示:??? Error using ==> plot
Vectors must be the same lengths.
请大家给予指点。


L=1;%悬臂梁的度
C1=10;    %假设 C1
a1=1.875/L;
a2=4.694/L;
a3=7.855/L;
a4=7*pi/2*L;
x=0:0.01:1;

y1=C1*( cos(a1*x)-cosh(a1*x) + (cos(a1*L)+cosh(a1*L))*(sinh(a1*x)-sin(a1*x))/(sin(a1*L)+sinh(a1*L)) );
%第一阶振型函数
y2=C1*( cos(a2*x)-cosh(a2*x) + (cos(a2*L)+cosh(a2*L))*(sinh(a2*x)-sin(a2*x))/(sin(a2*L)+sinh(a2*L)) );
%第三阶振型函数
y3=C1*( cos(a3*x)-cosh(a3*x) + (cos(a3*L)+cosh(a3*L))*(sinh(a3*x)-sin(a3*x))/(sin(a3*L)+sinh(a3*L)) );
%第三阶振型函数
y4=C1*( cos(a4*x)-cosh(a4*x) + (cos(a4*L)+cosh(a4*L))*(sinh(a4*x)-sin(a4*x))/(sin(a4*L)+sinh(a4*L)) );
%第四阶振型函数

m1=diff(y1);
%对第一阶振型函数求导
m2=diff(y2);
%对第二阶振型函数求导
m3=diff(y3);
%对第三阶振型函数求导
m4=diff(y4);
%对第四阶振型函数求导

plot(x,m1,x,m2,x,m3,x,m4)
%绘各阶振型函数曲线

huright 发表于 2007-5-13 16:05

求导之后,导数值比变量少了一个。

yangzj 发表于 2007-5-13 16:06

提示不是写的很清楚吗,长度不同,x是101的,m1 m2 m3 m4都是100的

huright 发表于 2007-5-13 16:10

看看这样行不行

L=1;%悬臂梁的度
C1=10;    %假设 C1
a1=1.875/L;
a2=4.694/L;
a3=7.855/L;
a4=7*pi/2*L;
x=0:0.01:1;
xl=length(x)
y1=C1*( cos(a1*x)-cosh(a1*x) + (cos(a1*L)+cosh(a1*L))*(sinh(a1*x)-sin(a1*x))/(sin(a1*L)+sinh(a1*L)) );
%第一阶振型函数
y2=C1*( cos(a2*x)-cosh(a2*x) + (cos(a2*L)+cosh(a2*L))*(sinh(a2*x)-sin(a2*x))/(sin(a2*L)+sinh(a2*L)) );
%第三阶振型函数
y3=C1*( cos(a3*x)-cosh(a3*x) + (cos(a3*L)+cosh(a3*L))*(sinh(a3*x)-sin(a3*x))/(sin(a3*L)+sinh(a3*L)) );
%第三阶振型函数
y4=C1*( cos(a4*x)-cosh(a4*x) + (cos(a4*L)+cosh(a4*L))*(sinh(a4*x)-sin(a4*x))/(sin(a4*L)+sinh(a4*L)) );
%第四阶振型函数
m1=diff(y1);
m1l=length(m1)
%对第一阶振型函数求导
m2=diff(y2);
%对第二阶振型函数求导
m3=diff(y3);
%对第三阶振型函数求导
m4=diff(y4);
%对第四阶振型函数求导
xx=x(2:xl)
plot(xx,m1,xx,m2,xx,m3,xx,m4)

flow2731 发表于 2007-5-13 16:27

你的X输出有101个数,而y1,y2,y3,y4求导后都会少一个数,是100个。应该再定义一个X1=0.01:0.01:1。最后改为plot(x1,m1,x1,m2,x1,m3,x1,m4)就可以了

tiange 发表于 2007-5-13 19:11

请问这个程序改里面的哪个部分才能正确

L=1;%悬臂梁的度
C1=10;    %假设 C1
a1=1.875/L;
a2=4.694/L;
a3=7.855/L;
a4=7*pi/2*L;
x=0:0.1:1;

y1=C1*( cos(a1*x)-cosh(a1*x) + (cos(a1*L)+cosh(a1*L))*(sinh(a1*x)-sin(a1*x))/(sin(a1*L)+sinh(a1*L)) );
%第一阶振型函数
y2=C1*( cos(a2*x)-cosh(a2*x) + (cos(a2*L)+cosh(a2*L))*(sinh(a2*x)-sin(a2*x))/(sin(a2*L)+sinh(a2*L)) );
%第三阶振型函数
y3=C1*( cos(a3*x)-cosh(a3*x) + (cos(a3*L)+cosh(a3*L))*(sinh(a3*x)-sin(a3*x))/(sin(a3*L)+sinh(a3*L)) );
%第三阶振型函数
y4=C1*( cos(a4*x)-cosh(a4*x) + (cos(a4*L)+cosh(a4*L))*(sinh(a4*x)-sin(a4*x))/(sin(a4*L)+sinh(a4*L)) );
%第四阶振型函数

m1=diff(y1,2);
m2=diff(y2,2);
m3=diff(y3,2);
m4=diff(y4,2);

x1=0.01:0.01:1;

subplot(4,1,1)
plot(x,m1)%绘第一阶振型函数曲线
subplot(4,1,2)
plot(x,m2)%绘第二阶振型函数曲线
subplot(4,1,3)
plot(x,m3)%绘第三阶振型函数曲线
subplot(4,1,4)
plot(x,m4)%绘第四阶振型函数曲线

yangzj 发表于 2007-5-13 19:43

前面的帖子不是有人给你回过了吗

tiange 发表于 2007-5-13 19:45

我对振型函数求了二阶导数后,还是弄不明白,改了相关参数后,结果还是不正确

yangzj 发表于 2007-5-13 19:53

diff是求差分,对一个向量求n阶差分,就会少n个点。你把x的前两个点去掉再画图

tiange 发表于 2007-5-13 20:02

这样改后还是有错误,我还是不明白

L=1;%悬臂梁的度
C1=10;    %假设 C1
a1=1.875/L;
a2=4.694/L;
a3=7.855/L;
a4=7*pi/2*L;
x=0:0.01:1;
x1=0.02:0.01:1;

y1=C1*( cos(a1*x)-cosh(a1*x) + (cos(a1*L)+cosh(a1*L))*(sinh(a1*x)-sin(a1*x))/(sin(a1*L)+sinh(a1*L)) );
%第一阶振型函数
y2=C1*( cos(a2*x)-cosh(a2*x) + (cos(a2*L)+cosh(a2*L))*(sinh(a2*x)-sin(a2*x))/(sin(a2*L)+sinh(a2*L)) );
%第三阶振型函数
y3=C1*( cos(a3*x)-cosh(a3*x) + (cos(a3*L)+cosh(a3*L))*(sinh(a3*x)-sin(a3*x))/(sin(a3*L)+sinh(a3*L)) );
%第三阶振型函数
y4=C1*( cos(a4*x)-cosh(a4*x) + (cos(a4*L)+cosh(a4*L))*(sinh(a4*x)-sin(a4*x))/(sin(a4*L)+sinh(a4*L)) );
%第四阶振型函数


z1=diff(y1);
z2=diff(y2);
z3=diff(y3);
z4=diff(y4);


subplot(4,1,1)
plot(x1,z1)%绘第一阶振型函数曲线
subplot(4,1,2)
plot(x1,z2)%绘第二阶振型函数曲线
subplot(4,1,3)
plot(x1,z3)%绘第三阶振型函数曲线
subplot(4,1,4)
plot(x1,z4)%绘第四阶振型函数曲线
??? Error using ==> plot
Vectors must be the same lengths.

tiange 发表于 2007-5-13 20:06

谢谢大家 我终于摸索出来了
L=1;%悬臂梁的度
C1=10;    %假设 C1
a1=1.875/L;
a2=4.694/L;
a3=7.855/L;
a4=7*pi/2*L;
x=0:0.01:1;
x1=0.02:0.01:1;

y1=C1*( cos(a1*x)-cosh(a1*x) + (cos(a1*L)+cosh(a1*L))*(sinh(a1*x)-sin(a1*x))/(sin(a1*L)

+sinh(a1*L)) );
%第一阶振型函数
y2=C1*( cos(a2*x)-cosh(a2*x) + (cos(a2*L)+cosh(a2*L))*(sinh(a2*x)-sin(a2*x))/(sin(a2*L)

+sinh(a2*L)) );
%第三阶振型函数
y3=C1*( cos(a3*x)-cosh(a3*x) + (cos(a3*L)+cosh(a3*L))*(sinh(a3*x)-sin(a3*x))/(sin(a3*L)

+sinh(a3*L)) );
%第三阶振型函数
y4=C1*( cos(a4*x)-cosh(a4*x) + (cos(a4*L)+cosh(a4*L))*(sinh(a4*x)-sin(a4*x))/(sin(a4*L)

+sinh(a4*L)) );
%第四阶振型函数


z1=diff(y1,2);
z2=diff(y2,2);
z3=diff(y3,2);
z4=diff(y4,2);


subplot(4,1,1)
plot(x1,z1)%绘第一阶振型函数曲线
subplot(4,1,2)
plot(x1,z2)%绘第二阶振型函数曲线
subplot(4,1,3)
plot(x1,z3)%绘第三阶振型函数曲线
subplot(4,1,4)
plot(x1,z4)%绘第四阶振型函数曲线

jesschang 发表于 2012-12-13 16:21

我想请问,那个C1为什么取10??
页: [1]
查看完整版本: 我这个程序所在的错误我弄不明白,请大家指点