Fminunc崩溃matlab如果大量输入变量使用

1次观看(过去30天)
我正在研究一个问题,其中需要优化的目标函数(非线性)的输入变量是n*3矩阵的元素,其中n从2000-3000。在这里,我提供了脚本的基本部分。
清晰的所有
clc
% n = 2000;
n = 3; k = 3;规范化= 0;周期= 0;
m = n + k + 1;
[t范围]= UniformKnotVector (k, n,周期性,规范化);
c =负载(“Data.txt”);
p1 = c (: 18:20);
p2 = c (: 21:23);
v = 0(大小(c, 1), 3);
f = @ (A) 0;
我= 1:1:大小(c, 1)
disp(我)
v(我,1)= (p2(我,1)p1(我,1))/ (sqrt (((p2(我,1)p1(我,1))^ 2)+ ((p2(我,2)p1(我,2))^ 2)+ ((p2(我,3)p1(我,3))^ 2)));
v(我,2)= (p2(我,2)p1(我,2))/ (sqrt (((p2(我,1)p1(我,1))^ 2)+ ((p2(我,2)p1(我,2))^ 2)+ ((p2(我,3)p1(我,3))^ 2)));
v(我,3)= (p2(我,3)p1(我,3))/ (sqrt (((p2(我,1)p1(我,1))^ 2)+ ((p2(我,2)p1(我,2))^ 2)+ ((p2(我,3)p1(我,3))^ 2)));
x = c(我,24)* ((n - k + 2) / 127.59);
N11 = BSpline1 (k, t, x, n,周期);
N22 = BSpline2 (k, t, x, N11周期);
N33 = BSpline3 (k, t, x, N22周期);
fx = @ (A) 0;财政年度= @ (A) 0; fz = @ (A) 0;
j = 1:1 (n + 1)
fx = @ (A)(外汇(A) + (j, 1) * N33 (j, 1));
= @财政年度(A)(财政年度(一)+ (j, 2) * N33 (j, 1));
fz = @ (A) (fz (A) + (j, 3) * N33 (j, 1));
结束
f = @ (A) (f(一)+ ((p1(我,1)外汇(A)) ^ 2 + (p1(我,2)财政年度(A)) ^ 2 + (p1(我,3)fz (A)) ^ 2 - (((p1(我,1)外汇(A)) * v(我,1))+ ((p1(我,2)财政年度(A)) * v(我,2))+ ((p1(我,3)fz (A)) * v(我,3)))^ 2));
结束
A0 = 1 (n + 1, 3);
[Aopt,据]= fminunc (f, A0);
对于较小的n值(例如,3,4,5,…),脚本可以正常工作。对于较大的值(例如,n=15,16,…),它会逐渐花费更多的时间。最后,对于我感兴趣的实际n值(n=2000),脚本导致MATLAB崩溃,没有任何错误。
我该怎么办?

接受的答案

马特·J
马特·J 2021年9月23日
编辑:马特·J 2021年10月8日
那么,将匿名函数累积地嵌套在另一个函数内部的做法是在自找麻烦。你至少应该把整个函数转换成一个非匿名函数,如下所示。同样,你也错过了用矩阵/向量运算代替for循环的机会。
我= 1:1:大小(c, 1)
v(我,1)= (p2(我,1)p1(我,1))/ (sqrt (((p2(我,1)p1(我,1))^ 2)+ ((p2(我,2)p1(我,2))^ 2)+ ((p2(我,3)p1(我,3))^ 2)));
v(我,2)= (p2(我,2)p1(我,2))/ (sqrt (((p2(我,1)p1(我,1))^ 2)+ ((p2(我,2)p1(我,2))^ 2)+ ((p2(我,3)p1(我,3))^ 2)));
v(我,3)= (p2(我,3)p1(我,3))/ (sqrt (((p2(我,1)p1(我,1))^ 2)+ ((p2(我,2)p1(我,2))^ 2)+ ((p2(我,3)p1(我,3))^ 2)));
x = c(我,24)* ((n - k + 2) / 127.59);
N11 (:, i) = BSpline1 (k, t, x, n,周期);
N22 (:, i) = BSpline2 (k, t, x, N11周期);
N33 (:, i) = BSpline3 (k, t, x, N22周期);
结束
[Aopt,据]= fminunc (@ (A) myObjective (N33, p, v) A0);
函数f = myObjective (N33, p, v)
fxyz = N33。”*;
D = p1-fxyz;
f =总和(d . ^ 2 - (d * v) ^ 2);
结束
3评论
Satyajit Ghosh)
Satyajit Ghosh) 2021年9月24日
我检查了两种情况下的函数值,以获得特定的初始估计矩阵A0。这两种情况下的值是相同的。

登录评论。

更多答案(0)

类别

了解更多基于问题的优化设置帮助中心而且文件交换

标签

s manbetx 845


释放

R2018a

社区寻宝

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

开始狩猎!