Simultaneously solve over-defined system of 35 equations, with only 2 unknowns

2 visualizzazioni (ultimi 30 giorni)
Hello all,
I am working on a task that required I solve a system of 35 equations simultaneously with only 2 unknowns (C_res and C_com). For testing purposes, I know C_res=10 and C_com = 3, bececause that those are what I used to generate this set of test data. I want to now back calculate by solving the system, to see if I can return 10 and 3 respectively. I have tried a number of different approached, to no avail. Any advice on how to proceed? The system is listed below:
C_com*0.019958 + C_res*0.001355 = 0.096414
C_com*0.011540 + C_res*0.002914 = 0.071350
C_com*0.011884 + C_res*0.002321 = 0.077717
C_com*0.021041 + C_res*0.001501 = 0.098315
C_com*0.017151 + C_res*0.002486 = 0.096639
C_com*0.061172 + C_res*0.002525 = 0.127806
C_com*0.062088 + C_res*0.002593 = 0.152420
C_com*0.022630 + C_res*0.001280 = 0.061495
C_com*0.016839 + C_res*0.019232 = 0.325849
C_com*0.014295 + C_res*0.003936 = 0.229735
C_com*0.019703 + C_res*0.001384 = 0.060252
C_com*0.011229 + C_res*0.002353 = 0.077214
C_com*0.009877 + C_res*0.001812 = 0.060915
C_com*0.033494 + C_res*0.001748 = 0.092057
C_com*0.025067 + C_res*0.010123 = 0.549264
C_com*0.017647 + C_res*0.003492 = 0.269245
C_com*0.024743 + C_res*0.002433 = 0.111095
C_com*0.064556 + C_res*0.002207 = 0.123315
C_com*0.017908 + C_res*0.004114 = 0.144336
C_com*0.013836 + C_res*0.001517 = 0.054355
C_com*0.019288 + C_res*0.002908 = 0.118257
C_com*0.031022 + C_res*0.003405 = 0.151315
C_com*0.048541 + C_res*0.001760 = 0.105437
C_com*0.023193 + C_res*0.003459 = 0.137682
C_com*0.018366 + C_res*0.004016 = 0.176947
C_com*0.023130 + C_res*0.002538 = 0.114965
C_com*0.022414 + C_res*0.006339 = 0.263932
C_com*0.025681 + C_res*0.006058 = 0.306177
C_com*0.012938 + C_res*0.003611 = 0.122432
C_com*0.011334 + C_res*0.002826 = 0.090667
C_com*0.015383 + C_res*0.001646 = 0.065659
C_com*0.179909 + C_res*0.002903 = 0.230218
C_com*0.197321 + C_res*0.003644 = 0.407217
C_com*0.018255 + C_res*0.001998 = 0.085715
C_com*0.026331 + C_res*0.001720 = 0.078840
Thanks in advance.

Risposta accettata

Walter Roberson
Walter Roberson il 20 Mar 2022
Linear does not appear to be a good model for that system -- or at least 10, 3 is not at all suitable. Closer to 27, 1
syms C_com C_res
eqn = [
C_com*0.019958 + C_res*0.001355 == 0.096414
C_com*0.011540 + C_res*0.002914 == 0.071350
C_com*0.011884 + C_res*0.002321 == 0.077717
C_com*0.021041 + C_res*0.001501 == 0.098315
C_com*0.017151 + C_res*0.002486 == 0.096639
C_com*0.061172 + C_res*0.002525 == 0.127806
C_com*0.062088 + C_res*0.002593 == 0.152420
C_com*0.022630 + C_res*0.001280 == 0.061495
C_com*0.016839 + C_res*0.019232 == 0.325849
C_com*0.014295 + C_res*0.003936 == 0.229735
C_com*0.019703 + C_res*0.001384 == 0.060252
C_com*0.011229 + C_res*0.002353 == 0.077214
C_com*0.009877 + C_res*0.001812 == 0.060915
C_com*0.033494 + C_res*0.001748 == 0.092057
C_com*0.025067 + C_res*0.010123 == 0.549264
C_com*0.017647 + C_res*0.003492 == 0.269245
C_com*0.024743 + C_res*0.002433 == 0.111095
C_com*0.064556 + C_res*0.002207 == 0.123315
C_com*0.017908 + C_res*0.004114 == 0.144336
C_com*0.013836 + C_res*0.001517 == 0.054355
C_com*0.019288 + C_res*0.002908 == 0.118257
C_com*0.031022 + C_res*0.003405 == 0.151315
C_com*0.048541 + C_res*0.001760 == 0.105437
C_com*0.023193 + C_res*0.003459 == 0.137682
C_com*0.018366 + C_res*0.004016 == 0.176947
C_com*0.023130 + C_res*0.002538 == 0.114965
C_com*0.022414 + C_res*0.006339 == 0.263932
C_com*0.025681 + C_res*0.006058 == 0.306177
C_com*0.012938 + C_res*0.003611 == 0.122432
C_com*0.011334 + C_res*0.002826 == 0.090667
C_com*0.015383 + C_res*0.001646 == 0.065659
C_com*0.179909 + C_res*0.002903 == 0.230218
C_com*0.197321 + C_res*0.003644 == 0.407217
C_com*0.018255 + C_res*0.001998 == 0.085715
C_com*0.026331 + C_res*0.001720 == 0.078840];
[A, b] = equationsToMatrix(eqn);
sol = double(A)\double(b)
sol = 2×1
1.3567 27.6365
That's not what you were expecting. Let us cross-check it using calculus:
residue = sum((lhs(eqn) - rhs(eqn)).^2)
residue = 
partial_C_com = solve(diff(residue, C_com), C_com)
partial_C_com = 
residue2 = subs(residue, C_com, partial_C_com);
best_C_res = solve(diff(residue2, C_res))
best_C_res = 
best_C_com = subs(partial_C_com, C_res, best_C_res)
best_C_com = 
vpa(best_C_res)
ans = 
27.636495308141025959898672833332
vpa(best_C_com)
ans = 
1.3567395942095351614689670453202
which is the same as the \ operator came out as.

Più risposte (1)

Torsten
Torsten il 20 Mar 2022
Modificato: Torsten il 20 Mar 2022
Put the coefficients in a (35x2) matrix A and the numbers of the right-hand side in a (35x1) vector b.
Then you can solve for C_com and C_res as
C = A\b
where C(1) becomes C_com and C(2) becomes C_res.
Code:
M=[ 0.019958 0.001355 0.096414
0.011540 0.002914 0.071350
0.011884 0.002321 0.077717
0.021041 0.001501 0.098315
0.017151 0.002486 0.096639
0.061172 0.002525 0.127806
0.062088 0.002593 0.152420
0.022630 0.001280 0.061495
0.016839 0.019232 0.325849
0.014295 0.003936 0.229735
0.019703 0.001384 0.060252
0.011229 0.002353 0.077214
0.009877 0.001812 0.060915
0.033494 0.001748 0.092057
0.025067 0.010123 0.549264
0.017647 0.003492 0.269245
0.024743 0.002433 0.111095
0.064556 0.002207 0.123315
0.017908 0.004114 0.144336
0.013836 0.001517 0.054355
0.019288 0.002908 0.118257
0.031022 0.003405 0.151315
0.048541 0.001760 0.105437
0.023193 0.003459 0.137682
0.018366 0.004016 0.176947
0.023130 0.002538 0.114965
0.022414 0.006339 0.263932
0.025681 0.006058 0.306177
0.012938 0.003611 0.122432
0.011334 0.002826 0.090667
0.015383 0.001646 0.065659
0.179909 0.002903 0.230218
0.197321 0.003644 0.407217
0.018255 0.001998 0.085715
0.026331 0.001720 0.078840];
C = M(:,1:2)\M(:,3);
C_com = C(1)
C_res = C(2)
sum((M(:,1:2)*C-M(:,3)).^2)
sum((M(:,1:2)*[3;10]-M(:,3)).^2)

Categorie

Scopri di più su Mathematics in Help Center e File Exchange

Prodotti


Release

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by