24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1963  |  回复: 23

sunshine819

金虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★
z65668396: 金币+2, ★★★★★最佳答案 2013-10-19 18:33:12
臭水沟: 金币+2, 谢谢交流~ 2013-10-20 19:00:31
引用回帖:
9楼: Originally posted by z65668396 at 2013-10-19 16:35:19
嗯嗯   谢谢   
麻烦问下  如果用matlab function可以吗?
我的程序输出s 是 v 的函数
在matlab funtion 的设置里输入Ct
这样对吗?...

我一般不这样实现,会影响simulink的运行速度,你既然在外部算出了一组自变量和一组相应地函数值,直接用lookuptable是合理的选择,我看过几个example,mathworks自己一般都这样做,不过不知你具体仿真的什么对象,要依据自己的目的来选择,同样的功能有许多不同的实现方式的
日光之下皆覆辙 月光之下皆旧梦
11楼2013-10-19 16:45:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

z65668396

金虫 (正式写手)

引用回帖:
10楼: Originally posted by sp_tried at 2013-10-19 16:35:32
感觉还是不太清楚你的情况.......
如果可以,你把v和计算s的程序给我,我来试试。...

输入v是风速 只要超过11.4就行 我拿正弦弄的  
根据风速  通过我帖子上面的程序  
可以求出s   然后输出就行了
我就是要这个s  我看有文献是用look up table做的
把look up table 换成matlab function   
在matlab function模块里把sin改成我帖子里的M函数 Ct
这样可以吗?
心有猛虎,细嗅蔷薇。
12楼2013-10-19 16:50:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

z65668396

金虫 (正式写手)

引用回帖:
11楼: Originally posted by sunshine819 at 2013-10-19 16:45:27
我一般不这样实现,会影响simulink的运行速度,你既然在外部算出了一组自变量和一组相应地函数值,直接用lookuptable是合理的选择,我看过几个example,mathworks自己一般都这样做,不过不知你具体仿真的什么对象, ...

嗯嗯   我看文献里也是用的lookuptable
是不是我先在matlab里用for循环
通过改变v 输出一组对应的 s
然后再lookup table的input和output里 分别用v和s?
心有猛虎,细嗅蔷薇。
13楼2013-10-19 16:55:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sp_tried

铜虫 (初入文坛)

引用回帖:
13楼: Originally posted by z65668396 at 2013-10-19 16:55:40
嗯嗯   我看文献里也是用的lookuptable
是不是我先在matlab里用for循环
通过改变v 输出一组对应的 s
然后再lookup table的input和output里 分别用v和s?...

实际上你之前的问题没说清楚,问题不是lookup table怎么设置,而是对于不同的v怎么求解s。刚用你的程序试了一下,报错了
同意你的说法,用for循环试试。
另外,用function应该没法求解吧,你没有s关于v的函数式
oneforall,andallforone!
14楼2013-10-19 17:04:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sunshine819

金虫 (小有名气)

【答案】应助回帖


臭水沟: 金币+1, 谢谢交流~ 2013-10-20 19:02:02
引用回帖:
13楼: Originally posted by z65668396 at 2013-10-19 16:55:40
嗯嗯   我看文献里也是用的lookuptable
是不是我先在matlab里用for循环
通过改变v 输出一组对应的 s
然后再lookup table的input和output里 分别用v和s?...

大概的意思就是这样,不过你在simulink模型里最好加一个初始化文件,这个文件里面包含你计算出来的数据,这样就不用每次打开的时候都重新生成一遍这两个数据了
日光之下皆覆辙 月光之下皆旧梦
15楼2013-10-19 17:04:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

z65668396

金虫 (正式写手)

引用回帖:
15楼: Originally posted by sunshine819 at 2013-10-19 17:04:47
大概的意思就是这样,不过你在simulink模型里最好加一个初始化文件,这个文件里面包含你计算出来的数据,这样就不用每次打开的时候都重新生成一遍这两个数据了...

嗯   好的
心有猛虎,细嗅蔷薇。
16楼2013-10-19 17:08:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

z65668396

金虫 (正式写手)

引用回帖:
14楼: Originally posted by sp_tried at 2013-10-19 17:04:05
实际上你之前的问题没说清楚,问题不是lookup table怎么设置,而是对于不同的v怎么求解s。刚用你的程序试了一下,报错了
同意你的说法,用for循环试试。
另外,用function应该没法求解吧,你没有s关于v的 ...

可以啊  把程序保存成Ct
然后给一个风速   比如Ct(18)就行
我的程序是先求了一个含有v的方程  
未知数x有多解  判断了以后令a=x  然后s=4*a*(1-a)
心有猛虎,细嗅蔷薇。
17楼2013-10-19 17:17:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sp_tried

铜虫 (初入文坛)

引用回帖:
17楼: Originally posted by z65668396 at 2013-10-19 17:17:38
可以啊  把程序保存成Ct
然后给一个风速   比如Ct(18)就行
我的程序是先求了一个含有v的方程  
未知数x有多解  判断了以后令a=x  然后s=4*a*(1-a)...

我是直接给v赋值一个行向量,所以运行报错;
就用for循环吧,逐个解出v对应的s,然后查表,我以前用过lookup table,挺好用。
oneforall,andallforone!
18楼2013-10-19 18:02:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

z65668396

金虫 (正式写手)

引用回帖:
18楼: Originally posted by sp_tried at 2013-10-19 18:02:27
我是直接给v赋值一个行向量,所以运行报错;
就用for循环吧,逐个解出v对应的s,然后查表,我以前用过lookup table,挺好用。...

嗯 好的  非常感谢
心有猛虎,细嗅蔷薇。
19楼2013-10-19 18:32:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

z65668396

金虫 (正式写手)

引用回帖:
15楼: Originally posted by sunshine819 at 2013-10-19 17:04:47
大概的意思就是这样,不过你在simulink模型里最好加一个初始化文件,这个文件里面包含你计算出来的数据,这样就不用每次打开的时候都重新生成一遍这两个数据了...

您好  有个关于Lookup table的问题还得向您请教
程序是这个
CODE:
ZF=320-70;
w=698.094;
L=902.2;
EA=384243000;
CB=1;   %静摩擦系数
x=[4.9144e5,5.4374e5];   %fsolve所用初值 (XF=828.67   ZF=250)  
XF=853.87-5.2-20:0.1:853.87-5.2+20;
n=length(XF);
for i=1:n  %for循环 改变方程中XF的值
    if L-x(2)/w>0    %有躺底
    f1=@(x)([L-x(2)/w+(x(1)/w)*log(x(2)/x(1)+sqrt(1+(x(2)/x(1))^2))+x(1)*L/EA+CB*w*(-(L-x(2)/w)^2+(L-x(2)/w-x(1)/(CB*w))*max(L-x(2)/w-x(1)/(CB*w),0))/(2*EA)-XF(i);
        (x(1)/w)*(sqrt(1+(x(2)/x(1))^2)-1)+x(2)^2/(2*w*EA)-ZF]);
    z=fsolve(f1,x,optimset('Display','off'));
    HF(i)=z(1);
    VF(i)=z(2);
    XF(i)
    x=z     %将方程的解作为下一步fsolve初值
else   %无躺底
    f2=@(x)([(x(1)/w)*(log(x(2)/x(1)+sqrt(1+(x(2)/x(1))^2))-log((x(2)-w*L)/x(1)+sqrt(1+((x(2)-w*L)/x(1))^2)))+x(1)*L/EA-XF(i);
        (x(1)/w)*(sqrt(1+(x(2)/x(1))^2)-sqrt(1+((x(2)-w*L)/x(1))^2))+(x(2)*L-w*L^2/2)/EA-ZF]);
    z=fsolve(f2,x,optimset('Display','off'));
    HF(i)=z(1);
    VF(i)=z(2);
    XF(i)
    x=z     %将方程的解作为下一步fsolve初值
    end
end

输入是XF ZF 其中ZF是常数 XF变化    输出是HF VF
中间是求解非线性方程组
我在用Lookup table设置的时候报错  
Look up table问题求教
意思貌似是输入要单调递增   可是我的输入XF在matlab计算的时候确实是单调递增的
您能看看哪里有问题吗?  我在网上没找到相关的解决办法  
谢谢
心有猛虎,细嗅蔷薇。
20楼2013-10-19 20:13:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 z65668396 的主题更新
信息提示
请填处理意见