我是靠谱客的博主 发嗲绿茶,最近开发中收集的这篇文章主要介绍matlab的for循环计算多元方程的解,系数变量for循环,求多元一次方程组,运算太慢,怎么优........,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本帖最后由 尧遥S 于 2016-2-20 19:47 编辑

我在做一个弹簧力学模型的优化求解,大致是物体质量,质心坐标,弹簧的连接点坐标,弹簧的刚度系数最小值,最大值,步长,物体偏转角等参数由excel文件输入,弹簧的刚度系数为循环变量,求解多元一次方程组,输出满足物体偏转角限制的各组弹簧系数和对应的伸长量。

我的问题简单来说是循环嵌套的矩阵求解(我把解方程组转变为矩阵求解了)速度太慢,怎么优化算法?

我的算法如下:

function chengxu

clear;clc;

s=xlsread('参数.xlsx');%读取参数.xlsx

xa=s(1);ya=s(17);%物质心坐标(xa,ya)

xb=s(2);yb=s(18);%板质心坐标(xb,yb)

x1=s(3);y1=s(19);%弹簧1连接点坐标(x1,y1)

x2=s(4);y2=s(20);%弹簧2连接点坐标(x2,y2)

x3=s(5);y3=s(21);%弹簧3连接点坐标(x3,y3)

x4=s(6);y4=s(22);%弹簧4连接点坐标(x4,y4)

x5=s(7);y5=s(23);%弹簧5连接点坐标(x5,y5)

x6=s(8);y6=s(24);%弹簧6连接点坐标(x6,y6)

x7=s(9);y7=s(25);%弹簧7连接点坐标(x7,y7)

x8=s(10);y8=s(26);%弹簧8连接点坐标(x8,y8)

x9=s(11);y9=s(27);%弹簧9连接点坐标(x9,y9)

Ga=s(49);%物重量

Gb=s(50);%板重量

min=s(13);step=s(14);max=s(15);%弹簧刚度范围及步长min:step:max

theta=s(16);%最大偏转角限制

for k1=min:step:max

for k2=min:step:max

for k3=min:step:max

for k4=min:step:max

for k5=min:step:max

for k6=min:step:max

for k7=min:step:max

for k8=min:step:max

for k9=min:step:max

%物:ΣFz=0,k1*z1+k2*z2+k3*z3+k4*z4+k5*z5=Ga

%物:ΣMx(F)=0,k1*z1*(y1-ya)+(k2*z2+k3*z3)*(y2-ya)+(k4*z4+k5*z5)*(y5-ya)=0

%物:ΣMy(F)=0,(k2*z2+k5*z5)*(x5-xa)+k1*z1*(x1-xa)+(k3*z3+k4*z4)*(x4-xa)=0

%物:∵两条相交直线确定一个平面∴两条对角线各自中点的位置始终重合,即伸长量相等,1/2*(z2+z4)=1/2*(z3+z5)

%物:∵两条相交直线确定一个平面∴两条对角线各自中点的位置始终重合,即伸长量相等,1/2*(1/2*(z3+z4)+z1)=1/2*(z2+z5)

%板:ΣFz=0,k6*z6+k7*z7+k8*z8+k9*z9=k1*z1+k2*z2+k3*z3+k4*z4+k5*z5+Gb,即:k6*z6+k7*z7+k8*z8+k9*z9=Ga+Gb

%板:ΣMx(F)=0,(k6*z6+k7*z7)*(y6-yb)+(k4*z4+k5*z5)*(y5-yb)+(k8*z8+k9*z9)*(y9-yb)+(k2*z2+k3*z3)*(y2-yb)+k1*z1*(y1-yb)=0

%板:ΣMy(F)=0,(k6*z6+k9*z9)*(x6-xb)+(k3*z3+k4*z4)*(x3-xb)+(k7*z7+k8*z8)*(x7-xb)+k1*z1*(x1-xb)+(k2*z2+k5*z5)*(x2-xb)=0

%板:∵两条相交直线确定一个平面∴两条对角线各自中点的位置始终重合,即伸长量相等,1/2*(z6+z8)=1/2*(z7+z9)

%将以上九元一次方程组通过矩阵化简求解(系数矩阵为A,常数项为b,结果为R)

A=[k1 k2 k3 k4 0 0 0 0 0;k1*(y1-ya) k2*(y2-ya) k3*(y2-ya) k4*(y5-ya) k5*(y5-ya) 0 0 0 0;k1*(x1-xa) k2*(x5-xa) k3*(x4-xa) k4*(x4-xa) k5*(x5-xa) 0 0 0 0;0 1 -1 1 -1 0 0 0 0;1 -1 0.5 0.5 -1 0 0 0 0;0 0 0 0 0 k6 k7 k8 k9;k1*(y1-yb) k2*(y2-yb) k3*(y2-yb) k4*(y5-yb) k5*(y5-yb) k6*(y6-yb) k7*(y6-yb) k8*(y9-yb) k9*(y9-yb);k1*(x1-xb) k2*(x2-xb) k3*(x3-xb) k4*(x3-xb) k5*(x2-xb) k6*(x6-xb) k7*(x7-xb) k8*(x7-xb) k9*(x6-xb);0 0 0 0 0 1 -1 1 -1];

b=[Ga;0;0;0;0;Ga+Gb;0;0;0];

R=Ab;

z1=R(1);z2=R(2);z3=R(3);z4=R(4);z5=R(5);z6=R(6);z7=R(7);z8=R(8);z9=R(9);%R=[z1 z2 z3 z4 z5 z6 z7 z8 z9]'

thetax=atand(abs((1/2*(z8+z9)+z5)-(1/2*(z6+z7)+z2))/abs(y5-y2));%此时物x轴方向的偏转角thetax

thetay=atand(abs((1/2*(z7+z8)+1/2*(z3+z4))-(1/2*(z6+z9)+z1))/abs(x3-x1));%此时物y轴方向的偏转角thetay

if (thetax<=theta)&&(thetay

fprintf('k1=%g,k2=%g,k3=%g,k4=%g,k5=%g,k6=%g,k7=%g,k8=%g,k9=%gn',k1,k2,k3,k4,k5,k6,k7,k8,k9)%输出满足条件的各弹簧刚度

fprintf('z1=%g,z2=%g,z3=%g,z4=%g,z5=%g,z6=%g,z7=%g,z8=%g,z9=%gn',z1,z2,z3,z4,z5,z6,z7,z8,z9)%输出此时的各弹簧伸长量

fprintf('thetax=%g,thetay=%gnn',thetax,thetay)%输出此时的x轴方向和y轴方向的偏转角

end

end

end

end

end

end

end

end

end

end

f5c3d56501a3d0261ce0cb81cbf824a7.gif

2016-2-20 19:46 上传

点击文件名下载附件

4 KB, 下载次数: 0

5724a1379ceb16a514510c7aa4f77048.gif

2016-2-20 19:46 上传

点击文件名下载附件

9.82 KB, 下载次数: 0

最后

以上就是发嗲绿茶为你收集整理的matlab的for循环计算多元方程的解,系数变量for循环,求多元一次方程组,运算太慢,怎么优........的全部内容,希望文章能够帮你解决matlab的for循环计算多元方程的解,系数变量for循环,求多元一次方程组,运算太慢,怎么优........所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部