Tôi đang sử dụng chức năng tối ưu hóa của scipy.fsolve lần đầu tiên để tìm nguồn gốc của phương trình. Vấn đề là bất kỳ số nào tôi sử dụng làm giá trị đoán/ước tính là những gì tôi nhận được như câu trả lời của tôi (trong khoảng 8 chữ số thập phân). Khi sử dụng full_output = True, tôi lấy exitflag là '1', nghĩa là 'giải pháp hội tụ', theo nghĩa tốt nhất của tôi nên có nghĩa là đầu ra thực sự là gốc của phương trình.fsolve luôn trả về phỏng đoán/ước tính
Tôi biết có một số hữu hạn các gốc riêng biệt (được đặt cách nhau), như khi tôi vẽ đồ thị phương trình, tôi có thể thấy chúng. Ngoài ra, fsolve không thành công (cung cấp lỗi exitflags) khi tôi nhập điểm bắt đầu vào trong phạm vi sẽ trả về một giá trị không xác định (chia cho số không, căn bậc hai của giá trị âm). Nhưng bên cạnh đó nó luôn luôn trở lại điểm khởi đầu là gốc.
Tôi đã thử nghiệm fsolve với một phương trình rất đơn giản và nó hoạt động tốt, vì vậy tôi biết rằng tôi đang nhập tất cả mọi thứ tôi cần và nên sử dụng fsolve chính xác. Tôi cũng đã cố gắng xung quanh với một số đối số đầu vào, nhưng tôi không hiểu chúng rất rõ ràng và dường như không có gì thay đổi).
Dưới đây là các mã có liên quan (E là biến chỉ, mọi thứ khác có khác không giá trị):
def func(E):
s = sqrt(c_sqr * (1 - E/V_0))
f = s/tan(s) + sqrt(c_sqr - s**2)
return f
guess = 3
fsolve(func, guess)
mà chỉ kết quả đầu ra '3' và nói rằng, mặc dù 'Các giải pháp hội tụ.' các giải pháp gần nhất nên vào khoảng 2,8 và 4,7.
Có ai có ý tưởng nào về cách sửa lỗi này và nhận câu trả lời đúng (sử dụng fsolve) không?
Có lẽ bạn chỉ là một người đoán rất tốt. –
Giá trị cho 'V_0' là gì? –
Bạn có thể cung cấp các giá trị cho 'V_0' và' c_sqr' không?Tôi đã thử đặt 'c_sqr = 100' và' V_0 = 10' và nó hội tụ chính xác với gốc 2.90496355. –