24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1774  |  回复: 9

三星2010

木虫 (小有名气)

[求助] 请matlab高手看一下这个问题怎样编程才好,附程序代码,谢谢!

主要工作就是求解隐函数方程,参数及方程如下:
taof=7.2;
Gf=0.576;
delta1=0.034;
deltaf=0.16;
b1=25;
E1=250000;
t1=5.12;
b2=400;
E2=10000;
t2=20;
L=1200;
eql=600;
beta=b2*E2*t2/(b1*E1*t1);
lamda=((taof^2/2/Gf*(1/E1/t1+b1/b2/E2/t2)))^0.5;
lamda1=(lamda^2*2*Gf/(delta1*taof))^0.5;
lamda2=(lamda^2*2*Gf/(deltaf-delta1)/taof)^0.5;
参数a和h满足一下关系l
amda2/lamda1*sinh(lamda1*(L-a-h))- cot(lamda2*h)*cosh(lamda1*(L-a-h)-1/beta/sin(lamda2*h)=0
我能肯定的是a从0单调增大至892.806169,h的范围大致是[135,150]我想要的结果是将a的变化区间若干等分,比如1000等分,对每一个a去求对应的h并将这两个参数输出.
我自己编写的程序如下:
for i=1:1:892.9/0.001
    a(i)=i*0.001-0.001;
error=1;
  for j=135/0.001:1:150/0.001
    h1(j)=j*0.001;
    error1(j)=lamda2/lamda1*sinh(lamda1*(L-a(i)-h1(j)))- ...
                cot(lamda2*h1(j))*cosh(lamda1*(L-a(i)-h1(j)))- ...
                1/beta/sin(lamda2*h1(j));
       if error>abs(error1(j))
    error=abs(error1(j));
       h(i)=h1(j);
       end
end
if L break;
end
ltpu(i)=lamda2/lamda1*tanh(lamda1*(L-h(i)-a(i)))*cos(lamda2*h(i))+sin(lamda2*h(i));
ltpb(i)=lamda2/((lamda1)^2*delta1*b1*E1*t1)*(1+cos(lamda2*h(i))/(beta*cosh(lamda1*(L-a(i)-h(i)))));
ltp(i)=ltpu(i)/ltpb(i);
lts(i)=deltaf+ltp(i)*a(i)/(b1*E1*t1);
end
plot(lts,ltp,'b');
程序运行后总提示h未定义,不知道是哪里出了问题,有没有更好的办法求解啊,我都被这个问题折磨晕了,请大家出手相助!

[ Last edited by 三星2010 on 2012-12-26 at 16:36 ]
回复此楼
静心,合力
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

chembetsey

木虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
三星2010: 金币+10, 有帮助, 我不能确定h到底是多少维的,可以这样预定义吗? 2012-12-27 11:30:00
h是一个一维矩阵,你需要先定义一下,如:h=zeros[1000]
2楼2012-12-26 23:57:16
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

chembetsey

木虫 (小有名气)

【答案】应助回帖

你可以定义一个足够大的就是了,虽然有点浪费内存。
如果你知道维数大小,就定义成指定的大小。

» 本帖已获得的红花(最新10朵)

3楼2012-12-28 00:49:29
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

dbb627

荣誉版主 (著名写手)

【答案】应助回帖

感谢参与,应助指数 +1
>> taof=7.2;
Gf=0.576;
delta1=0.034;
deltaf=0.16;
b1=25;
E1=250000;
t1=5.12;
b2=400;
E2=10000;
t2=20;
L=1200;
eql=600;
beta=b2*E2*t2/(b1*E1*t1);
lamda=((taof^2/2/Gf*(1/E1/t1+b1/b2/E2/t2)))^0.5;
lamda1=(lamda^2*2*Gf/(delta1*taof))^0.5;
lamda2=(lamda^2*2*Gf/(deltaf-delta1)/taof)^0.5;
syms a h
f=lamda2/lamda1*sinh(lamda1*(L-a-h))- cot(lamda2*h)*cosh(lamda1*(L-a-h))-1/beta/sin(lamda2*h);
ezplot(f,[0 900])

» 本帖已获得的红花(最新10朵)

The more you learn, the more you know, the more you know, and the more you forget. The more you forget, the less you know. So why bother to learn.
4楼2012-12-28 09:05:17
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

三星2010

木虫 (小有名气)

送鲜花一朵
引用回帖:
4楼: Originally posted by dbb627 at 2012-12-28 09:05:17
>> taof=7.2;
Gf=0.576;
delta1=0.034;
deltaf=0.16;
b1=25;
E1=250000;
t1=5.12;
b2=400;
E2=10000;
t2=20;
L=1200;
eql=600;
beta=b2*E2*t2/(b1*E1*t1);
lamda=((taof^2/2/Gf*(1/E1/t1+b1/b2/ ...

dbb627
你好,按你的建议画图试了一下,并不是期望的结果,因为a和h都有对应的物理量含义并且是一一对应的,而图中出现的是多值对应,很遗憾,这里仍表示感谢!
静心,合力
5楼2012-12-28 13:29:32
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

三星2010

木虫 (小有名气)

送鲜花一朵
引用回帖:
3楼: Originally posted by chembetsey at 2012-12-28 00:49:29
你可以定义一个足够大的就是了,虽然有点浪费内存。
如果你知道维数大小,就定义成指定的大小。

谢谢你再次回复!我的疑问是假设求解前预定义h=zeros[100]
但实际计算后只用到了前50维,那后面h是自动调整为50维还是后面的50维元素是都置0(h维数不变)?,前者的话就好了,如果是后者的话就不是期望的情形。
静心,合力
6楼2012-12-28 13:39:03
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

dbb627

荣誉版主 (著名写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
三星2010: 金币+30, ★★★很有帮助, 百度中也有个账号是dbb627,莫非就是阁下,真乃高人也,你的代码我看了一阵才明白,不过还是明白了,非常感谢! 2012-12-28 19:48:07
引用回帖:
5楼: Originally posted by 三星2010 at 2012-12-28 13:29:32
dbb627
你好,按你的建议画图试了一下,并不是期望的结果,因为a和h都有对应的物理量含义并且是一一对应的,而图中出现的是多值对应,很遗憾,这里仍表示感谢!...

taof=7.2;
Gf=0.576;
delta1=0.034;
deltaf=0.16;
b1=25;
E1=250000;
t1=5.12;
b2=400;
E2=10000;
t2=20;
L=1200;
eql=600;
beta=b2*E2*t2/(b1*E1*t1);
lamda=((taof^2/2/Gf*(1/E1/t1+b1/b2/E2/t2)))^0.5;
lamda1=(lamda^2*2*Gf/(delta1*taof))^0.5;
lamda2=(lamda^2*2*Gf/(deltaf-delta1)/taof)^0.5;
syms a h
f=@(a,h)lamda2/lamda1*sinh(lamda1*(L-a-h))- cot(lamda2*h)*cosh(lamda1*(L-a-h))-1/beta/sin(lamda2*h);
x=0:5:890;
h=zeros(numel(x),1);
for i=1:numel(x)
    opt=optimset('Display','off');
    a=x(i);
    h(i)=fsolve(@(h)f(a,h),135,opt);
end
plot(x,h)
The more you learn, the more you know, the more you know, and the more you forget. The more you forget, the less you know. So why bother to learn.
7楼2012-12-28 14:39:01
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

三星2010

木虫 (小有名气)

引用回帖:
7楼: Originally posted by dbb627 at 2012-12-28 14:39:01
taof=7.2;
Gf=0.576;
delta1=0.034;
deltaf=0.16;
b1=25;
E1=250000;
t1=5.12;
b2=400;
E2=10000;
t2=20;
L=1200;
eql=600;
beta=b2*E2*t2/(b1*E1*t1);
lamda=((taof^2/2/Gf*(1/E1/t1+b1/b2/E2/t2))) ...

这个运行的很好!结果也可以接受,只是我觉得少点什么,比如若将来碰到的问题含有三个参数,该方法能否比较容易推广至三维情形?最主要的是我现在还没有弄明白我编的程序问题出在何处。。。
静心,合力
8楼2012-12-28 20:10:29
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

615780236

禁虫 (知名作家)


感谢参与,应助指数 +1
jjdg: 金币+1, 辛苦了 2012-12-30 01:55:12
jjdg: 编辑内容 2012-12-30 01:55
本帖内容被屏蔽

9楼2012-12-28 20:47:05
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

三星2010

木虫 (小有名气)

引用回帖:
9楼: Originally posted by 615780236 at 2012-12-28 20:47:05
taof=7.2;
Gf=0.576;
delta1=0.034;
deltaf=0.16;
b1=25;
E1=250000;
t1=5.12;
b2=400;
E2=10000;
t2=20;
L=1200;
eql=600;
beta=b2*E2*t2/(b1*E1*t1);
lamda=((taof^2/2/Gf*(1/E1/t1+b1/b2/E2/t2)))^ ...

你和dbb627一个人吗,怎么写一样的代码
静心,合力
10楼2012-12-29 09:43:57
已阅   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 三星2010 的主题更新
信息提示
请填处理意见