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

2 visualizaciones (últimos 30 días)
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.

Respuesta aceptada

Walter Roberson
Walter Roberson el 20 de Mzo. de 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.

Más respuestas (1)

Torsten
Torsten el 20 de Mzo. de 2022
Editada: Torsten el 20 de Mzo. de 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)

Categorías

Más información sobre Mathematics en Help Center y File Exchange.

Productos


Versión

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by