24小时热门版块排行榜    

查看: 2022  |  回复: 23
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

z65668396

金虫 (正式写手)

[求助] Look up table问题求教

我用matlab编写了M函数  程序如下
CODE:
function s=Ct(v)
if v<11.4
    error
    return
end
eq1='2*1.29*pi*63^2*v^3*x*(1-x)^2-5e6';
x=solve(eq1);
x=eval(x);
x=real(x);
a=x(x>0&x<0.5);
s=4*a*(1-a);
return

由于simulink模型要用到这个数据  v为输入 s输出  
所以想利用look up table生成一个表  如下
Look up table问题求教
求教各位大神,Look up table应该如何设置
非常感谢
回复此楼
心有猛虎,细嗅蔷薇。
已阅   回复此楼   关注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问题求教-1
意思貌似是输入要单调递增   可是我的输入XF在matlab计算的时候确实是单调递增的
您能看看哪里有问题吗?  我在网上没找到相关的解决办法  
谢谢
心有猛虎,细嗅蔷薇。
20楼2013-10-19 20:13:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 24 个回答

sp_tried

铜虫 (初入文坛)

【答案】应助回帖

★ ★
臭水沟: 金币+2, 谢谢交流~ 2013-10-20 18:59:35
不知我理解地对不对:那段程序好像是根据v算出s,然后你想在仿真中用查表的关系实现根据不同的v值输出对应的s。
要实现这个功能,可以尝试:
1. 把你的数据v和算出的变量s保存为work space中的列向量;
2. 在lookup table参数设置界面中,vector of input values设置为变量v,Table data设置为变量s,查表方式对你这个案例应该影响不大,如果默认地内插值不行,换别的几种试试;
oneforall,andallforone!
3楼2013-10-19 12:55:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sp_tried

铜虫 (初入文坛)

【答案】应助回帖

★ ★ ★ ★ ★ ★
z65668396: 金币+5, ★★★很有帮助 2013-10-19 13:10:56
臭水沟: 金币+1, 谢谢交流~ 2013-10-20 18:59:49
不知我理解的是否正确:你似乎是想通过那段程序,用v值求出s,把计算得到的结果用于仿真,根据不同的v值查表得到s值。试试这样做:
1. 把你的v和算出的s保存为work space中的行向量;
2. 在lookup table参数设置页面,vector of input values设置为v,Table data设置为s,插值方式用默认应该就可以;
oneforall,andallforone!
4楼2013-10-19 13:04:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

z65668396

金虫 (正式写手)

引用回帖:
4楼: Originally posted by sp_tried at 2013-10-19 13:04:16
不知我理解的是否正确:你似乎是想通过那段程序,用v值求出s,把计算得到的结果用于仿真,根据不同的v值查表得到s值。试试这样做:
1. 把你的v和算出的s保存为work space中的行向量;
2. 在lookup table参数设置页 ...

麻烦问下  我的V是连续的   如果按照程序算的话是一系列间断点
查表会出现查不到对应的s
心有猛虎,细嗅蔷薇。
5楼2013-10-19 13:12:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见