মান মূল্য: গণিতের ডোমেন ত্রুটি


106

আমি পাইথনের সাথে ইঞ্জিনিয়ারিংয়ের সংখ্যা সংক্রান্ত পদ্ধতি থেকে কেবল একটি উদাহরণ পরীক্ষা করছিলাম ।

from numpy import zeros, array
from math import sin, log
from newtonRaphson2 import *

def f(x):
    f = zeros(len(x))
    f[0] = sin(x[0]) + x[1]**2 + log(x[2]) - 7.0
    f[1] = 3.0*x[0] + 2.0**x[1] - x[2]**3 + 1.0
    f[2] = x[0] + x[1] + x[2] -5.0
    return f

x = array([1.0, 1.0, 1.0])
print newtonRaphson2(f,x)

আমি যখন এটি চালাব, এটি নীচের ত্রুটিটি দেখায়:

File "example NR2method.py", line 8, in f
    f[0] = sin(x[0]) + x[1]**2 + log(x[2]) - 7.0
ValueError: math domain error

আমি লগ এটিকে সংকুচিত করেছিলাম যেমন আমি যখন লগ সরিয়ে অন্য কোনও ফাংশন যুক্ত করি, এটি কাজ করে। আমি ধরে নিলাম এটি বেসের সাথে একরকম হস্তক্ষেপের কারণে, আমি কীভাবে তা বুঝতে পারি না। কেউ কি সমাধানের পরামর্শ দিতে পারেন?

উত্তর:


136

আপনার কোড এমন logএকটি সংখ্যক করছে যা শূন্যের চেয়ে কম বা সমান। এটি গাণিতিকভাবে অপরিবর্তিত, তাই পাইথনের logফাংশন একটি ব্যতিক্রম উত্থাপন করে। এখানে একটি উদাহরণ:

>>> from math import log
>>> log(-1)
Traceback (most recent call last):
  File "<pyshell#59>", line 1, in <module>
    log(-1)
ValueError: math domain error

আপনার newtonRaphson2ফাংশনটি কী করে তা না জেনে , আমি নিশ্চিত নই যে আমি অনুমান করতে পারি যে অবৈধ x[2]মানটি কোথা থেকে এসেছে, তবে আশা করি এটি আপনাকে সঠিক পথে নিয়ে যাবে।


সংজ্ঞাগুলির সেটটি সংজ্ঞা হিসাবে সংজ্ঞা সংজ্ঞায়িত করা হচ্ছে এটি কীভাবে নেতিবাচক লগ করছে তা আমি দেখতে পাচ্ছি না, x [0], x [1] এবং x [2] হল ভ্যারিয়েবল x, y এবং z যা নিউটন র‌্যাফসন ব্যবহার করে । সমাধানের জন্য এটিগুলির এই সমীকরণগুলির সেট প্রয়োজন।
ramanunni.pm

4
এছাড়াও, আমি যেমন x [2] = 1.0 বলছি যখন আমি উপরের কোডে x সংজ্ঞায়িত করব, লগ (1) = 0, কমপক্ষে যা আমি যদিও করি, আমি ভুল হতে পারি .. যদিও সাহায্যের জন্য ধন্যবাদ ..
রামানুন্নী .এম

4
একটি যোগ print xআপনার ফাংশনের শুরুতে । আপনি দেখতে পাবেন কীভাবে সমীকরণটি সমাধানকারী একের পর এক এক্স এর বিভিন্ন মানকে চেষ্টা করে যা আপনার ত্রুটির দিকে পরিচালিত করে।
এমটিড্ডি

4
আমার ক্ষেত্রে সমস্যাটি ছিল যুক্তিটি নেতিবাচক নয়, তবে 0 এর ঠিক সমান, যা একই ব্যতিক্রমের দিকে নিয়ে যায় (যা জেএস ব্যাকগ্রাউন্ডযুক্ত লোকদের জন্য অবাক হতে পারে, যেখানে ম্যাথ.লগ (0) কেবল -Infinity)
qbolec

1

আপনি এমন কোনও জিনিসের লগারিদম করার চেষ্টা করছেন যা ইতিবাচক নয়।

লোগারিদমগুলি একটি সংখ্যা দেওয়ার পরে এবং এটিতে যে শক্তি বাড়ানো হয়েছিল তার ভিত্তিটি খুঁজে বের করে। log(0)মানে যে কিছু উপর ঘাত 2হয় 0। কোনও ক্ষতিকারক কখনই 0* * এর ফলশ্রুতিতে পারে না যার অর্থ log(0)এর কোনও উত্তর নেই, সুতরাং এটি ছুঁড়েmath domain error

* দ্রষ্টব্য: 0^0ফলাফল 0হতে পারে 1তবে একই সাথে ফলাফলও হতে পারে । এই সমস্যাটি ভারীভাবে বিতর্কিত হয়।


1

আপনি ব্যবহার করতে পারেন math.log1p

অনুযায়ী সরকারী ডকুমেন্টেশন :

গণিত.লগ 1 পি (এক্স)

1 + x (বেস ই) এর প্রাকৃতিক লোগারিদমটি ফিরিয়ে দিন। ফলাফলটি এমনভাবে গণনা করা হয় যা শূন্যের নিকটে x এর জন্য নির্ভুল।

আপনি পাওয়ার এক্স, বিয়োগ 1 এ math.expm1উত্পন্ন রিটার্ন ব্যবহার করে আপনি মূল মানটিতে ফিরে যেতে পারেন e


0

আপনি যে কোনও একটি কারণে গণিতের ডোমেন ত্রুটি পেয়ে যাচ্ছেন: হয় আপনি লগ ফাংশন বা শূন্য মানের ভিতরে একটি নেতিবাচক সংখ্যা ব্যবহার করার চেষ্টা করছেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.