使用线性系统Ax = b

问题描述

我正在尝试求解非线性系统的Ax = b,我的A矩阵是10x4的复数double,b矩阵是10x1的double

矩阵:

A matrix

b矩阵:

b matrix

我已经有了x的原始值,并且它们是

x_original = [800000000;200000000;10000;10000]; % coefficients to find

我需要对系统进行求解,以使我找到的x值接近x_original。系统扩展严重,我需要使用预处理器。 有谁知道如何做一个好的预处理剂?或如何解决这个问题。 我已经做到了这一点:

 % FFT force vector of X and Y values

b = [484.3603;252.2655;491.6905;429.6085;58.7645;127.1524;66.0117;129.4595;72.3755;85.87534];
% Fourier Coefficients of 0,1,2,3,4 order
B =[-3.43774677078494e-07  -4.20221293933872e-07  -0.00701727121110309  -0.00572957795130823 ; 4.20221293933872e-07  -3.43774677078494e-07   0.00572957795130823    -0.00701727121110309; 1.37693217325839e-07 + 1.56288664413688e-07i  2.92816693096910e-07 + 3.83805328364969e-08i  -5.61381696888257e-05 + 0.00371276651244773i   0.00316272702912214 + 0.00134731607253179i ; -2.92816693096910e-07 - 3.83805328364969e-08i  1.37693217325839e-07 + 1.56288664413688e-07i  -0.00316272702912214 - 0.00134731607253179i  -5.61381696888257e-05 + 0.00371276651244773i; -9.52668385119923e-09 - 9.91624629383402e-09i    -1.10443989519006e-07 + 4.38271460313829e-08i    -0.000300708115807454 + 0.00112742378667937i    -0.000905574528404713 + 0.000465016518748114i;  1.10443989519006e-07 - 4.38271460313829e-08i    -9.52668385119923e-09 - 9.91624629383402e-09i    0.000905574528404713 - 0.000465016518748114i     -0.000300708115807454 + 0.00112742378667937i; 2.15322298323200e-08 - 1.38823640633450e-08i       1.51798935991015e-08 - 7.89637438295323e-08i      0.000123699423967003 + 0.000670222670400645i      0.000260884166972916 - 0.000770828627122605i;  -1.51798935991015e-08 + 7.89637438295323e-08i     2.15322298323200e-08 - 1.38823640633450e-08i      -0.000260884166972916 + 0.000770828627122605i       0.000123699423967003 + 0.000670222670400645i;  9.57379529241477e-09 + 1.21238347959597e-08i      4.00282625674296e-08 + 4.12789159719483e-08i     4.30157250981611e-05 + 0.000723503482611052i     0.000448205639180228 + 0.000434001884691301i;  -4.00282625674296e-08 - 4.12789159719483e-08i      9.57379529241477e-09 + 1.21238347959597e-08i     -0.000448205639180228 - 0.000434001884691301i     4.30157250981611e-05 + 0.000723503482611052i];

% Multiplication factor for Fourier Coefficients because FFT values are doubled by Matlab 
 Y =[1;1;2;2;2;2;2;2;2;2]; 

% Final matrix A
A=  bsxfun(@times,B,Y); % Ax = b
fun = @(Pre_Conditioner)Solve(Pre_Conditioner(1),Pre_Conditioner(2),Pre_Conditioner(3),Pre_Conditioner(4),Pre_Conditioner(5),Pre_Conditioner(6),Pre_Conditioner(7),Pre_Conditioner(8),Pre_Conditioner(9),Pre_Conditioner(10),A,b)


% initial value for Preconditioner iterations

 x0 = [1;8800;8800;2;2;2;2;2;-8800;-2] 
[x] = lsqnonlin(fun,x0)

求解函数如下:

 function [error] = Solve(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,b)

% Preconditioner
Pre_Conditioner =[x1;x2;x3;x4;x5;x6;x7;x8;x9;x10].^(-1);

A = bsxfun(@times,Pre_Conditioner);
b = Pre_Conditioner.*b;

% Solve the equation Ax = b using Least Squares Method

%  Numerical Method
x_2 = inv(A.'*A)*A.'*b; % Least Square Estimation
x_2 = abs(x_2);

x_original = [800000000;200000000;10000;10000]; % coefficients to find

   
% Error calculation
for i =1:1:size(x_original,1)
    error_percent(i,1) = (abs((x_original(i)-x_2(i)))/x_original(i))*100
end

error = error_percent(1,1)+error_percent(2,1)+error_percent(3,1)+error_percent(4,1)
%error = error_percent(1,1)*error_percent(2,1)*error_percent(3,1)*error_percent(4,1)


end

有人知道如何自动更改预处理器的值,以使我得到的误差最小吗??

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...