我如何向量化一个函数?

377次浏览(最近30天)
大卫·弗朗哥
大卫·弗朗哥 2018年3月1日
评论道: 明星黾 2018年3月24日
我要向量化的函数是 Cross-in-Tray函数 (二):
f (X, Y) = -0.0001 * (abs (sin (X) * sin (Y) * exp (abs (100 - sqrt (X ^ 2 + Y ^ 2) / pi))) + 1) ^ 0.1;
我想使用这个命令(绘制函数):
fsurf (@ (x, y) crossintrayfcn ((x, y)))
我有这两个功能代码:
函数z = crossintrayfcn (xx)
x = xx (: 1);
y = xx (:, 2);
expcomponent = abs(100 -(√x。^ 2 + y ^ 2) /π));
z = -0.0001 * ((abs (sin (x)。* sin (y)。* exp (expcomponent)) + 1)。^ 0.1);
结束
和:
函数[y] = crossintrayfcn (xx)
x1 = xx (1);
x2 = xx (2);
fact1 =罪(x1) * sin (x2);
exp(abs(100 -√(x1^2 + x2^2)/pi));
y = -0.0001 * (abs(fact1*fact2 + 1)^0.1;
结束
但是他们什么也没有策划!
谢谢!

0评论

请登录评论。

接受的答案

明星黾
明星黾 2018年3月1日
向量化它只需要使用元素操作:
f = @ (X, Y) -0.0001 * (abs (sin (X)。* sin (Y)。* exp (abs (100 - sqrt (X ^ 2 + Y ^ 2) / pi))) + 1)。^ 0.1;
[x,y] = meshgrid(linspace(- 10,10,49));
数字
surfc (x, y, f (x, y))
网格
请参阅以下文档 数组与矩阵运算 (链接), 向量化 (链接)。

9日评论

显示 6年长的评论
大卫·弗朗哥
大卫·弗朗哥 2018年3月5日
是的,这些东西是无价的而且我的怀疑也得到了证实
最美丽的身影由 ezsurf 不像所给出的数字那么准确吗 fsurf
我们被骗了 :)
实验后奥特曼
实验后奥特曼 2018年3月24日
@StarStrider -谢谢,非常感谢
明星黾
明星黾 2018年3月24日
@Yair - 我的荣幸。

请登录评论。

答案(1)

大卫·弗朗哥
大卫·弗朗哥 2018年3月5日
由于上述问题,我使用自己的函数 surfc 来代替 fsurf :
函数z = plotfcn (fcn、范围、网格鲱鱼)
计算并绘制一个3D函数
%的输入:
% FCN - @myFunction(函数句柄)
%范围- [x1min x1 max x2min x2max](默认= [-10 10 -10 10])
% GRID -函数评估的网格大小(默认为101)
%阴影-设置颜色阴影属性(默认为0)
% 0 =多面(黑色网格线的连续colormap)
% 1 = interp(插值的colormap)
% 2 =平坦(延续的colormap)
%输出:
% Z -函数eval(网格x网格)
%的例子:
% z = pltfcn2 (@ackleyfcn, [-32 32;-32 32], 200, 1);
开关输入参数个数
情况下4
情况下3.
鲱鱼= 0;
情况下2
鲱鱼= 0;
网格= 101;
情况下1
鲱鱼= 0;
网格= 101;
range = [-10 10 -10 10];
否则
disp (没有足够的输入参数。功能要求。)
返回
结束
x1 = meshgrid(linspace(range(1,1), range(1,2), grid)));
x2 = meshgrid(linspace(range(1,3), range(1,4), grid))');
xx = [x1 (:), x2 (:));
f = fcn (xx);
f =重塑(f,大小(x1));
如果nargout = = 1
z = f;
结束
数字
surfc (x1, x2, f)
标题([func2str (fcn),“(x, y)”])
colormap飞机
如果鲱鱼= = 1
阴影插值函数
elseif鲱鱼= = 2
阴影
结束
结束

0评论

请登录评论。

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何帮助你!

开始狩猎!