matlab解里z1是什么 if(z= =z1)有什么错?

matlab 定义常量编写程序总是出问题,总是报错.请高人看下格式哪里出问题了.要求是Z是一个可变的常数,可以随时更改.x=[1,2,3,4,5];y=[7,16,31,0,79];z=2;myfunc=inline('beta(2)+beta(1).*x.*z','beta','z','x');beta=nlinfit(x,y,myfunc,[10,0.1]);a=beta(1),b=beta(2);Caused by:Error using inline/subsref (line 13)Not enough inputs to inline function.
用nlinfit(x,y,@fun,beta) 只能让函数有两个输入fun(beta,x)其中beta是参数,x是自变量如果fun有多于两个的变量,第三个变量就不能通过调用nlinfit传递给fun结果报错你的inline function输入参数数量不足.而z也不能作为beta(3)传进去,因为拟合过程会改变他的值,最纵不能起到固定常数的作用不过我们还是有办法的,把需要的额外不参与拟合的参数通过x传给fun因为nlinfit不理x和y具体有多少个值,只要把x传递给fun,能够得到长度和y相同的数列就可以所以,你要实现的功能可以通过以下程序实现x=[1,2,3,4,5];y=[7,16,31,0,79];z=2;x=[x z];myfunc=inline('beta(2)+beta(1).*x(1:end-1).*x(end)','beta','x');beta=nlinfit(x,y,myfunc,[10,0.1]);a=beta(1);b=beta(2);将z塞到x屁股后面,从x传递给myfunc,x变为[1,2,3,4,5,2];但是要注意在函数内部x的最后一个元素作为z,前面的5个元素参与运算那样myfunc的计算结果仍然是和y序列等长的5个数顺便讲句,其实可以通过这样的办法实验二维曲面的拟合设现有三组等长列向量对应二维曲面的x,y,z坐标x=[x1 x2 .xn]';y=[y1 y2 .yn]';z=[z1 z2 .zn]';要拟合为曲线方程z=f(beta,x,y),其中beta是参数,x,y是两个输入以二维旋转对称高斯曲面为例子z=A*exp((x^2+y^2)/B^2)+C可以这样操作X=[x y];Y=z;f=inline('beta(1)+exp((X(:,1).^2+X(:,2).^2)./beta(2)^2)+beta(3)','beta','X');beta=nlinfit(X,Y,f,beta0); %参数的初始值beta0A=beta(1);B=beta(2);C=beta(3);
为您推荐:
其他类似问题
扫描下载二维码 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
matlab常见问题小结
下载积分:2500
内容提示:matlab常见问题小结,matlab安装问题,matlab6.5安装问题,matlab解决实际问题,matlab下载,matlab plot,matlab,matlab教程,matlab7.0,matlab find,matlab论坛
文档格式:TXT|
浏览次数:2|
上传日期: 08:37:59|
文档星级:
该用户还上传了这些文档
matlab常见问题小结
官方公共微信matlab程序报错意思释疑、有用的小命令(转,很基础)
Subscript indices must either be real positive integers or
中文解释:下标索引必须是正整数类型或者逻辑类型出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从
0 开始,要么出现了负数。注:matlab 的语法规定矩阵的索引从 1 开始,这与 C 等编程语言的习惯不一样。
解决办法:自己调试一下程序,把下标为 0 或者负数的地方修正。
2.Undefined function or variable "U"
中文解释:函数或变量 U 没有定义
出错原因及解决办法:可能变量名输入错误,仔细检查
3.Matrix dimensions must agree
中文解释:矩阵的维数必须一致
出错原因:这是由于运算符(= + - / *
等)两边的运算对象维数不匹配造成的,典型的出错原因是错用了矩阵运算符。matlab 通过“.”来区分矩阵运算和元素运算。
解决办法:自己调试一下程序,保证运算符两边的运算对象维数一致。
4.Function definitions are not permitted at the prompt
or in scripts
中文解释:不能在命令窗口或者脚本文件中定义函数
出错原因:一旦在命令窗口写 function c =
myPlus(a,b),此错误就会出现,因为函数只能定义在 m 文件中。关于脚本文件和 m 文件的区别请查阅 matlab
基础书。简言之:
1) 如果你写成 function 的形式,那么必须写在 m 文件中,且以 function 开头(即 function
语句前不能包含其他语句,所有语句必须放在 function 中,当然,function 的定义可以有多个,各 function
之间是并列关系,不能嵌套);, g& Z# B*
n&& L: I3 i. Y
2) 如果你写成脚本的形式,则既可以写在命令窗口中,也可以写在 m 文件中,但两者均不能包含 function
语句(即不能进行函数的定义)
解决办法:新建一个 m&&
文件,然后再进行函数的定义
5.One or more output arguments not assigned during call
中文解释:在调用...函数过程中,一个或多个输出变量没有被赋值
出错原因:函数如果带有输出变量,则每个输出在返回的时候都必须被赋值。容易出现这个错误的两个地方是:在部分条件判断语句(如
if )中没有考虑到输出变量的返回值。
在循环迭代过程中部分变量的维数发生了变化。
解决办法:调试程序,仔细查看函数返回时各输出变量的值。更好的方法是:在条件判断或者执行循环之前对所使用的变量赋初值。
6. Index exceeds matrix dimensions.
中文解释:索引超出矩阵的范围
出错原因:在引用矩阵元素的时候,索引值超出矩阵应有的范围
解决办法:检查所定义数组的维数,和引用的范围。
assignment&& A(I) = B, the number
of elements in B and I must be the same
中文解释:在赋值语句 A(I) = B 中,B 和 I 的元素个数必须相同
出错原因:I 和 B 的维数、大小不一样。这正如“把 5 个水果放到 6 个篮子”、或者“把 6
个水果放到 5 个篮子”,均无法实现
解决办法:自己设置断点调试一下,看看 I 和 B
的维数、大小是否相同,不同的话就要修改成两者一致。
有用的小命令
擦去一页命令窗口
从工作空间清除所有变量
clear all& 从工作空间清除所有变量和函数
clf&&&&&&&&
清除图形窗口内容
列出当前工作空间中的变量
列出当前工作空间中的变量及信息
delete &文件名& 从磁盘删除指定文件
which &文件名&&
查找指定文件的路径
name.m&&&&
在工作空间查看name.m文件内容
what&&&&&&&&&&&&&&&
列出当前目录下的m文件
ls&&&&&&&&&&&&&&&&&&&&
列出当前目录的所有文件
dir&&&&&&&&&&&&&&&&&&
列出当前目录的所有文件(包括hidden file)
help&&&&&&&&&&&&&&&&
启动联机帮助文件显示
which&&&&&&&&&&&&&
找出函数与文件所在的目录名
edit&&&&&&&&&&&&&&&&
在命令行显示m文件
(1)MATLAB常用的基本数学函数
abs(x):纯量的绝对值或向量的长度&
sqrt(x):开平方
real(z):复数z的实部
imag(z):复数z的虚部
conj(z):复数z的共轭复数
round(x):四舍五入至最近整数
fix(x):无论正负,舍去小数至最近整数
floor(x):地板函数,即舍去正小数至最近整数
ceil(x):天花板函数,即加入正小数至最近整数&
sign(x):符号函数 (Signum function)。
&&&&&&&&&&&&&&&&
当x&0时,sign(x)=-1;
&&&&&&&&&&&&&&&&
当x=0时,sign(x)=0;
&&&&&&&&&&&&&&&&
当x&0时,sign(x)=1。
rem(x,y):求x除以y的馀数
gcd(x,y):整数x和y的最大公因数
lcm(x,y):整数x和y的最小公倍数
exp(x):自然指数
pow2(x):2的指数
log(x):以e为底的对数,即自然对数或
log2(x):以2为底的对数
log10(x):以10为底的对数
(2)MATLAB常用的三角函数
sin(x):正弦函数
cos(x):馀弦函数
tan(x):正切函数
asin(x):反正弦函数
acos(x):反馀弦函数
atan(x):反正切函数
(3)适用於向量的常用函数有
min(x): 向量x的元素的最小值
max(x): 向量x的元素的最大值
mean(x): 向量x的元素的平均值
median(x): 向量x的元素的中位数
std(x): 向量x的元素的标准差
diff(x): 向量x的相邻元素的差
sort(x): 对向量x的元素进行排序(Sorting)
length(x): 向量x的元素个数
norm(x): 向量x的欧氏(Euclidean)长度
sum(x): 向量x的元素总和
prod(x): 向量x的元素总乘积
cumsum(x): 向量x的累计元素总和
cumprod(x): 向量x的累计元素总乘积
dot(x, y): 向量x和y的内积
cross(x, y): 向量x和y的外积
(4)MATLAB常用到的永久常数。
i或j:基本虚数单位(即)
eps:系统的浮点(Floating-point)精确度
inf:无限大, 例如1/0
nan或NaN:非数值(Not a number),例如0/0
pi:圆周率 p(= 3.1415926...)
realmax:系统所能表示的最大数值
realmin:系统所能表示的最小数值
nargin: 函数的输入引数个数
nargin: 函数的输出引数个数
(5)MATLAB基本绘图函数
plot: x轴和y轴均为线性刻度(Linear scale)
loglog: x轴和y轴均为对数刻度(Logarithmic scale)
semilogx: x轴为对数刻度,y轴为线性刻度
semilogy: x轴为线性刻度,y轴为对数刻度
若要画出多条曲线,只需将座标对依次放入plot函数即可:
plot(x, sin(x), x, cos(x));
若要改变颜色,在座标对後面加上相关字串即可:
plot(x, sin(x), 'c', x, cos(x), 'g');
若要同时改变颜色及图线型态(Line style),也是在座标对後面加上相
关字串即可:
plot(x, sin(x), 'co', x, cos(x), 'g*');
(6)plot绘图函数的叁数
字元 颜色 字元 图型
y 黄色 . 点
k 黑色 o 圆
w 白色 x x
b 蓝色 + +
g 绿色 * *
r 红色 - 实线
c 亮青色 : 点线
m 锰紫色 -. 点虚线
====================================================
(8)图形处理
图形完成後,我们可用axis([xmin,xmax,ymin,ymax])函数来调整图轴的范
axis([0, 6, -1.2, 1.2]);
此外,MATLAB也可对图形加上各种注解与处理:
xlabel('Input Value'); % x轴注解
ylabel('Function Value'); % y轴注解
title('Two Trigonometric Functions'); % 图形标题
legend('y = sin(x)','y = cos(x)'); % 图形注解
% 显示格线
我们可用subplot来同时画出数个小图形於同一个视窗之中:
subplot(2,2,1); plot(x, sin(x));
subplot(2,2,2); plot(x, cos(x));
subplot(2,2,3); plot(x, sinh(x));
subplot(2,2,4); plot(x, cosh(x));
Matlab注释技巧
m文件如果是函数,保存的文件名最好与函数名一致,这点都很清楚。不过容易疏忽的是,m文件名的命名尽量不要是简单的英文单词,最好是由大小写英文/数字/下划线等组成。原因是简单的单词命名容易与matlab内部函数名同名,结果会出现一些莫名其妙的错误。例如,写个m文件,命名为spy,运行时就弹出一个怪怪的figure,呵呵,我当初还以为是什么bug。
2. 调试程序时,经常要屏蔽掉一整段程序进行,也就是将其标示注释符%。有两个办法:一种是选定后 ctrl+r和ctrl+t
一种是在段首加 if 0 ,段尾加 end,中间都不执行,也就相当于注释掉了
3. 写m文件时,选中某段程序内容,ctrl+i
让matlab帮你自动对齐程序。这样程序看起来很有层次,容易发现程序中的错误。
4. ctrl+F2作标签,ctrl+g 跳至某一行,这些快捷键都很实用。
5 matlab7中有块注释符号%{ 和 %}
6 多行加标注时,也可以选中需要添加标注程序,然后在Edit中/或者右键选择Comment。或者Uncomment除掉标注
MATLAB中的一些小技巧
1. Ctrl+C 中断正在执行的操作
如果程序不小心进入死循环,或者计算时间太长,可以在命令窗口中使用Ctrl+c来中断。MATLAB这时可能正疲于应付,响应会有些滞后。
2. figure命令新建一个绘图窗口
可以打开一个空的绘图窗口,接下的绘图命令可以将图画在它里面,而不会覆盖以前的绘图窗口。当有多个figure窗口时,在命令窗口中执行如Plot等命令将覆盖当前figure窗口中的对象。所谓的当前figure窗口,也就是最后一次查看的窗口(可以用命令gcf得到)。
figure(N),将编号为N的窗口置为当前figure,出现在所有窗口的最前面,如果该窗口不存在,则新建一个编号为N的空白figure。
3. 注释掉一段程序:%{、%}。
经典方法是用 if 0,但缺点是不够直观,注释掉的内容仍然保持代码的颜色。现在可以用 %和{
的组合。输入%{后,后面的代码都会变绿,在注释结束的地方再加上 %} 。
也可以选中要注释内容,在右键菜单中选择Comment (Uncomment去掉注释标记),或使用快捷键Ctrl+R。
将光标放在需要注释的行中,按Ctrl+R,将该行变为注释。取消注释也是一样的,快捷键为Ctrl+T。
4. doc 命令名,打开命令的帮助文档
与help命令不同,帮助文档MATLAB Help中对命令的描述更详细,往往还有一些例子,更便于理解。
5. clc 清屏
清除命令窗口中的所有输入和输出信息,不影响命令的历史记录。
6. clear 和clear all
clear 变量名:可以清除workspace中的无用的变量,尤其是一些特别大的矩阵,不用时及时清理,可以减少内存占用。
清除所有的变量,使workspace一无所有,当重新开始一次算法验证时,最好执行一次,让workspace中的变量一目了然。
7. close all
如果开了多个绘图窗口,用这个命令将它们一起关掉。
8. 上下光标键↑↓
在命令窗口中,上下光标键可以将历史记录中的命令复制到输入位置,便于快速重新执行。如果输入命令的前几个字母如 [row, col]
=,再使用光标键,则只会选择以这些字母开始的命令。
9. Tab补全
对名称记得不太清楚的命令,可以输入开头的几个字母,然后按Tab键,当只有一个以这些字母开头的命令时,将自动补全命令名,否则显示一个命令名列表,方便从中选择。当然,只在命令窗口中有效。
10. cell模式
在一个长长的脚本m文件中,可能需要对其中的一段反复修改,查看执行效果,这时,cell模式就非常有用了。cell模式相当于将其中的代码拷贝到命令窗口中运行。两个%后接一个空格(%%
)开始一个cell。将输入光标放到一个cell中时,背景将变为浅黄色,Ctrl+Enter执行cell中的代码。
执行cell中代码时不需要保存m文件,该m文件可以不在路径列表中。
cell模式中,断点不起作用,当然,调用的子程序中的断点还是正常的。
11. 获取文件列表,批处理
MATLAB内置了一些文件操作命令,
例如cd(切换工作目录),dir(同ls,显示目录内文件列表)等。dir命令可以返回目录中的文件和文件夹列表,存在一个结构体数组中。如果需要对一些数据文件进行批处理,而文件名又没有一定的规律,你可能需要借助于这个命令。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。matlab高手帮我看看程序错哪里吧x=-6:0.012:6;y=-4:0.008:4;z1=(sin(sqrt(x.^2+y.^2)))./sqrt(x.^2+y.^2);subplot(2,2,1);surfc(x,y,z1)z2=100*(y-x.^2).^2+(1-x).^2;subplot(2,2,2);surfc(x,y,z2)z3=arcos(x.^4+sin(y));subplot(2,2,3);surfc(x,y,z3)
永遠也得你01bc
x=-6:0.012:6;y=-4:0.008:4;[X,Y]&=&meshgrid(x,y);& & & & & &z1=(sin(sqrt(X.^2+Y.^2)))./sqrt(X.^2+Y.^2);subplot(2,2,1);surfc(X,Y,z1)shading& interpz2=100*(Y-X.^2).^2+(1-X).^2;subplot(2,2,2);surfc(X,Y,z2)shading&interpz3=atan(X.^4+sin(Y));subplot(2,2,3);surfc(X,Y,z3)shading&interp&&&画3D图要用矩阵来运算,用向量不要用surfcarcos是你自创的吧?应该是acos而且acos的范围是-1~1你的熟入范围不对,我给你换成了atan
为您推荐:
其他类似问题
扫描下载二维码MATLAB编程求和计算Z1=[1 2 3 4 5]Z2=[2 5 8 9 7]Z3=[2 6 9 8 7]想把这三个矩阵的和求出来并存放在矩阵A里,for i=1:3A(i)=sum(Z(i))end错的.为什么
陨落zLY52I
A = Z1+Z2+Z3就可以了啊,不用那么麻烦的如果想将和放进去就A = [sum(Z1) sub(Z2) sum(Z3)];
只是一个简单例子,问题是我现在要这么求和155个数据,不能这么手打吧....
那也没办法如果你的155个变量叫Z1 Z2 Z3到Z155如果放到一个二维数组里面就比较简单了实在不行的话matlab有个eval函数
为您推荐:
其他类似问题
扫描下载二维码

我要回帖

更多关于 matlab if语句 的文章

 

随机推荐