Simultaneously solve over-defined system of 35 equations, with only 2 unknowns
2 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Jeremiah Wright
il 20 Mar 2022
Modificato: Torsten
il 20 Mar 2022
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.
0 Commenti
Risposta accettata
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)
That's not what you were expecting. Let us cross-check it using calculus:
residue = sum((lhs(eqn) - rhs(eqn)).^2)
partial_C_com = solve(diff(residue, C_com), C_com)
residue2 = subs(residue, C_com, partial_C_com);
best_C_res = solve(diff(residue2, C_res))
best_C_com = subs(partial_C_com, C_res, best_C_res)
vpa(best_C_res)
vpa(best_C_com)
which is the same as the \ operator came out as.
0 Commenti
Più risposte (1)
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)
0 Commenti
Vedere anche
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
