原理引用:https://blog.csdn.net/weixin_43319685/article/details/103167458
Clear["Global`*"] (* //Simplify *)
b = {-0.0001067708, -0.0000664063, -0.0000480035, -0.0000348958, \
-0.0001170573, -0.0000865234, -0.0000750868, -0.0000685221, \
-0.0000901042, -0.0000675781, -0.0000601273, -0.0000556641, \
-0.0000672526, -0.0000515625, -0.0000462457, -0.0000412457};
deta = 40;
maxdata = 180;
ex11 = Table[{a1, b1}, {a1, deta, maxdata,
deta}, {b1, -deta, -maxdata, -deta}];
ex11 = Flatten[ex11, 1];
Length[ex11]
len = Length[b]
ex12 = Table[Flatten[{ex11[[num]], b[[num]]}], {num, 1, len, 1}]
show1 = ListPlot3D[ex12]; (* 原始数据 *)
m = 3;
ex1 = {Table[a1^n, {n, 0, m}], Table[b1^n, {n, 0, m}]};
ex2 = Flatten[ex1](* 生成多项式 *)
ex3 = Table[
ex2, {a1, deta, maxdata, deta}, {b1, -deta, -maxdata, -deta}];
ex3 = Flatten[ex3, 1];
ex3 // MatrixForm(* 转矩阵查看 *)
Clear[a1, b1]
a = Table[Flatten[{ex3[[num]], b[[num]]}], {num, 1, len, 1}];
x1 = {a1, b1, c1, d1, a2, b2, c2, d2, -1};
a = a.x1
a // MatrixForm(* 转矩阵查看 *)
size = Length[a]
ex5 = \!\(
\*UnderoverscriptBox[\(\[Sum]\), \(i =
1\), \(size\)]\(a[\([\)\(i\)\(]\)]^2\)\); (* 求绝对值 最小 *)
ex51 = D[ex5, a1] // Simplify
ex52 = D[ex5, b1] // Simplify
ex53 = D[ex5, c1] // Simplify
ex54 = D[ex5, d1] // Simplify
ex61 = D[ex5, a2] // Simplify
ex62 = D[ex5, b2] // Simplify
ex63 = D[ex5, c2] // Simplify
ex64 = D[ex5, d2] // Simplify
ex70 = Solve[{ex51 == 0, ex52 == 0, ex53 == 0, ex54 == 0, ex61 == 0,
ex62 == 0, ex63 == 0, ex64 == 0}, {a1, b1, c1, d1, a2, b2, c2, d2}]
a1 = 0;
ex70
ex70 = {a1, b1, c1, d1, a2, b2, c2, d2} /. ex70
x2 = {1, id, id^2, id^3, 1, iq, iq^2, iq^3};
ex71 = ex70.x2 // Simplify
show1
show2 = Plot3D[ex71, {id, 0, 150}, {iq, 0, -150},
ColorFunction -> "RustTones"]
Show[show1, show2]