95128


pythonでnumpyを使用した線形代数問題の解き方に詰まっています。

A=100％でXの値7、Ｙの値1、Ｚの値6.5  
B=100%でXの値1.2、Ｙの値1.2、Ｚの値1.8  
C=100%でXの値0.5、Ｙの値8.5、Ｚの値0.95

例題  
目標：X=7、Ｙ=1、Ｚ=6.5＃答えＡ＝100％、Ｂ＝0％、Ｃ＝0％  
目標：X=1.2、Ｙ=1.2、Ｚ=1.8＃答えＡ＝0％、Ｂ＝100％、Ｃ＝0％  
目標：X=0.5、Ｙ=8.5、Ｚ=0.95＃答えＡ＝0％、Ｂ＝0％、Ｃ＝100％  
目標：X=0.109、Ｙ=0.289、Ｚ=0.1295＃答えＡ＝1％、Ｂ＝2％、Ｃ＝3％  
目標：X=8.7、Ｙ=10.7、Ｚ=9.25＃答えＡ＝100％、Ｂ＝100％、Ｃ＝100％

A,B,Cのパーセンテージを調整してA,B,CそれぞれのX,Y,Z足した時、目標のX,Y,Zの値に合わせるコードを製作しているのですがなかなかうまくいきません。numpyを使用して線形代数を使用すればいいというところまではいったのですがそこで止まっています。


CC BY-SA 4.0
2023-06-07T09:10:46.483
95127
2023-06-08T02:46:41.320
58347
question
python numpy
pythonを使用した線形代数の計算について


行列で方程式解くので, 縦横逆で

[code]

    import numpy as np
    
    mat = np.array([[7.0, 1.2, 0.5],
                    [1.0, 1.2, 8.5],
                    [6.5, 1.8, 0.95]])
    
    r = np.array([0.109, 0.289, 0.1295])
    np.rint(np.linalg.solve(mat, r) *100)
    
    # array([1., 2., 3.])
    
[/code]


CC BY-SA 4.0
2023-06-07T12:02:12.173
95128
2023-06-07T12:02:12.173
43025
95127
answer


SymPy 使う方法  
(数値(浮動小数点数)の誤差が少ないはず)

[code]

    from sympy import symbols, Matrix, solve
    
    a, b, c = symbols('a b c')
    mat1, mat2, mat3 = Matrix([7, 1, 6.5]), Matrix([1.2, 1.2, 1.8]), Matrix([0.5, 8.5, 0.95])
    
    expr = a*mat1 +b*mat2 +c*mat3
    display(expr)
    solve(expr - Matrix([0.109, 0.289, 0.1295]))
    
[/code]

[![SymPy結果](https://i.stack.imgur.com/wTYrS.png)](https://i.stack.imgur.com/wTYrS.png)


CC BY-SA 4.0
2023-06-08T02:46:41.320
95138
2023-06-08T02:46:41.320
43025
95127
answer