关于MATLAB程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于MATLAB程序相关的知识,希望对你有一定的参考价值。

function y=fungold(x);
%narmuda
narmuda1=[310.6 312.8 325 316.7 318.9 323.3 330.1 333.3 332.6 331.2 331.1 330.9];
narmuda2=[331 331.6 331.8 332.1 332 332.3 331.9 332 331.8 330.1 327.2 324.8];
narmuda=[narmuda1 narmuda2];
A1=[1.072 1.087 1.174 1.114 1.130 1.161 1.211 1.234 1.229 1.219 1.218 1.217];
A2=[1.217 1.222 1.223 1.225 1.225 1.227 1.224 1.225 1.223 1.211 1.190 1.172];
A=[A1 A2];
%delta
syms delta;
for i=1:24
Q(i)=0.019*((narmuda(i)*delta-2.962)/0.038)^2+2.962*(narmuda(i)*delta-2.962)/0.038+135;
end
Q_SUM=sum(Q);
fuc=Q_SUM-11111;
delta=solve(fuc,'delta');
delta=eval(delta) %eval表示求字符串表达式delta的值,得两个值
%p and q
for i=1:24
p(i)=(narmuda(i)*delta(1)-2.962)/0.038 ;%得到1*24的向量
q(i)=0.019*p(i)^2+2.962*p(i)+135 ;%得到1*24的向量/*这是求来做什么*/
end
for i=1:24
a(i)=sqrt(A(i));
b(i)=(narmuda(i)/10)-3*a(i);%得到第一个值1*24的行向量
c(i)=(narmuda(i)/10)+3*a(i);%得到最后一个值1*24的行向量
end
for i=1:24
name_string1=['d' num2str(i) '=linspace(b(i),c(i),11)'];
name_string2=['p' num2str(i) '=(0.177*linspace(b(i),c(i),11)-2.962)/0.038'];
eval(name_string1);
eval(name_string2);
end
C=[x*d1;x*d2;x*d3;x*d4;x*d5;x*d6;x*d7;x*d8;x*d9;x*d10;x*d11;x*d12;x*d13;x*d14;x*d15;x*d16;x*d17;x*d18;x*d19;x*d20;x*d21;x*d22;x*d23;x*d24];
E=[33.70;33.66;30.84;32.08;30.53;31.17;32.73;30.88;35.43;32.94;32;30.71;31.42;34.43;36.48;31.29;35.63;35.25;30;33.97;33.08;31.48;31.24;35.42];
for i=1:24
for j=2:11
if C(i,j)>E(i)
C(i,j-1);
F(i)=0.019*((C(i,j-1)*0.177-2.962)/0.038)^2+2.962*((C(i,j-1)*0.177-2.962)/0.038)+135;
break;
end
end
end
y=sum(F)
这是我用MATLAB实现黄金分割法调用的一个函数,是要把整体作为一个函数调用,现在的问题是每次给定一个x,要通过C矩阵进行下面的判断循环来实现一个F矩阵,然后把这个F矩阵里的所有元素求和,然后把这个和值赋给y,现在问题是第一次循环实现以后所赋予y的是一个常数值,第二次赋予x值得循环就没法再代入y里进行计算了,可是如何在C矩阵那里还是含参数X的代下来,就没法先进行比较,选择循环就没法继续下去。所以我现在想把后面从C矩阵开始选择循环这部分整体作为一个函数调用,整个作为y的函数体,每次给x以后先比较,在求和,这个循环选择部分都作为y的函数。可是上述矛盾无法解决,主函数的循环无法进行,跪求MATLAB高人帮我解答,感激不尽,在线等,急急急。
clear;
clc;
a=0;
b=1;
tolerance=0.0001;n=0;i=100;
for k=1:i
if(abs(b-a)<=tolerance)
y=fungold((b+a)/2);
break;else
a1=b-0.618*(b-a);
a2=a+0.618*(b-a);
if(fungold(a1)<=fungold(a2))
a=a1;else
b=a2;
y=fungold((b+a)/2);
end
n=n+1;
end
end
n,a0=(b+a)/2,y=fungold((b+a)/2)
这是我黄金分割法程序的主函数,fungold即为调用的整体上一个程序(整体作为一个函数),因为每次给定一个x的循环是在主函数中,所以每次调用的上一个程序结果必定是一个含有x的代数式,可按我的描述却成了一个常数值,所以没法继续循环下去。

参考技术A 你这个说的比较复杂。但我想clear可以更方便解决你这个问题。譬如,在一次循环结束后,我要使x重新无定义,使用clear x即可。循环再次开始后,x的值又可以重新被赋值了。 参考技术B 检查一下,第一次你输入的x是什么数据类型,第二次循环的时候读入的x是什么样的数据类型的。现在在外面机器上没有matlab,晚上可以给你调一下。追问

麻烦你帮我调一下吧

追答

你的代码有问题。
从fungold的line36到line44,计算完成之后,F依然为空。计算出现错误。也就是说if C(i,j)>E(i)这个判断条件可能是有问题的。

留下你的联系方式吧。

PS:刚刚帮你调通了你的程序,但是结果需要你去验证。在fungold后面,将原来的y=sum(F)去掉。加上如下代码
if isempty(F) == 0
y=sum(F);
else
y = 0;
end
然后在fungold函数的下一行加上初始化F = [ ];

这个代码本身不难,自己试着写一下吧。

追问

我QQ四零二三五六二六八

本回答被提问者采纳
参考技术C MATLAB论坛

关于MATLAB处理大数据坐标文件

原先有3000条测试数据,MATLAB表现出来强大的数据处理能力,十几秒就可以把数据分类、分装并储存,这次共有10万条坐标数据,MATLAB明显后劲不足,显示内存不足

 

 

自我认识:以前MATLAB数据处理是手动将数据导入mat表格,再由程序运行表格数据,但是这次运行光坐标压缩文件就有35兆,就算导入成功也是相当恐怖的一个表格文件

解决方案:1、拒绝手动导入,程序导入

     2、不使用表格,表格的内存占用明显比文本文档大太多(当然,这种方案比较极端,但是必须执行,否则后期明显性能上就差别人一大截)

以上是关于关于MATLAB程序的主要内容,如果未能解决你的问题,请参考以下文章

关于matlab程序中的结构体

您好,看到您的关于matlab的水印程序,您有没有相应的水印提取程序

matlab编程,关于迭代算法中迭代次数问题

关于用matlab仿真一级倒立摆的LQY控制的程序,大伙谁有帮忙提供一下,多谢了

求助关于matlab滤波功能

关于BP神经网络MATLAB程序