如何让代码有效吗?

3视图(30天)
艾美
艾美 2021年6月8日
回答: 史蒂文的主 2021年6月8日
我做了下面的代码。
x = (0: n - 1);
y = (0: n - 1);
k = 0;
i = 1: n
j = 1: n
如果快速眼动(((y (j)) ^ 2) - ((x (i)) ^ 3) 2 * (x (i)) 3、n) = = 0
k = k + 1;
xy_mtx (k) = (x (i) y (j));
结束
结束
结束
我想让它有效,尽可能高效。这是可能的

答案(3)

大卫•希尔
大卫•希尔 2021年6月8日
n = 10;
(x, y) = meshgrid (0: n - 1);
idx =国防部(y) ^ 2 x ^ 3 - 2 * 3, n) = = 0;
xy_mtx = [x (idx), y (idx)];
4评论
大卫•希尔
大卫•希尔 2021年6月8日
编辑:大卫•希尔 2021年6月8日
你可以试着帮助记忆的建议,试图增加内存,或者你可以添加嵌套循环和做批2中的meshgrids e4(慢)。也记住浮点的局限性。
n = 1 e6;
xy_mtx = [];
k = 1:50
j = 1:50
(x, y) = meshgrid (0 + (k - 1) * 2 e4: min (2 e4-1 + (k - 1) * 2 e4, n - 1), 0 + (j - 1) * 2 e4: min (2 e4-1 + (j - 1) * 2 e4, n - 1));
idx =国防部(y) ^ 2 x ^ 3 - 2 * 3, n) = = 0;
xy_mtx = [xy_mtx; x (idx), y (idx)];
结束
结束

登录置评。


郑宇硕
郑宇硕 2021年6月8日
你可以一次性电影你不依赖于之前的值。
n = 4
n = 4
x = (0: n - 1);
y = (0: n - 1);
k = 0;
% % Orig_code
抽搐
i = 1: n
j = 1: n
如果快速眼动(((y (j)) ^ 2) - ((x (i)) ^ 3) 2 * (x (i)) 3、n) = = 0
k = k + 1;
xy_mtx (k) = (x (i) y (j));
结束
结束
结束
time1 = toc;
抽搐
% %尽
[X Y] = meshgrid (X, Y);%生成x和y的组合
REMmat =快速眼动((y ^ 2)——(X ^ 3) 2 * (X) 3、n);%执行所有快速眼动的计算
[indexies] =找到(REMmat = = 0);%找到指数快速眼动的0
xy_mtxM = [X (indexies) Y (indexies)];%只把X和Y梳子。上面rem -在哪里
time2 = toc;
disp ([xy_mtx xy_mtxM])
3 0 3 0 3 2 3 2
disp ([原来的:“num2str (time1)“年代”])
原来时间:0.008312
disp ([“新:”num2str (time2)“年代”])
新时间:0.016845
disp ([的时间增量:num2str (time1-time2)“年代”])
三角洲:-0.008533 s
2的评论
大卫•希尔
大卫•希尔 2021年6月8日
看看我的代码。

登录置评。


史蒂文的主
史蒂文的主 2021年6月8日
你是想找点一个吗 椭圆曲线 fn 吗?
你可以试着天真的方法给出的一个变体 这个维基百科页面

类别

找到更多的在循环和条件语句帮助中心文件交换

社区寻宝

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

开始狩猎!