В настоящее время я пытаюсь найти способ написать функцию в R, которая найдет предел текучести материала по кривой напряжений. У меня есть 24 графика деформации образца, которые были испытаны на растяжение.Поиск минимальной разницы между строкой соответствия и точками данных в R
Как правило, предел текучести определяется путем линейной части кривой деформации напряжений и смещения 0,2%. Там, где эта линия пересекается с исходной кривой деформации напряжения, известна как предел текучести материала.
Я могу найти наклон линейного участка графика. У меня возникают проблемы с тем, чтобы компенсировать эту линию и найти, где она пересекается с исходной кривой.
Мои напряжения деформации участки представляют собой дискретный набор точек данных, так что я буду соответствовать линейной кривой к первой части графа путем удаления некоторых точек. После того, как у меня будет линейное уравнение, я компенсирую его 0,2%. Используя уравнение смещения, я применил это к соответствующей кривой деформации напряжения.
Я бы сделал абсолютное значение минимума, чтобы получить хорошее приближение для пересекающейся точки. Если я не буду использовать абсолютное значение, я думаю, что R найдет большую отрицательную разницу между точками соответствия и данных, где линейное уравнение покидает страницу.
Чтобы быстро запустить мой код, загрузите файл csv из ссылки Dropbox.
#Set the working directory to where you saved the CSV file and R script.
setwd("C:/your_working_directory")
#Read in the CSV
test_file <- read.csv("C:/your_working_directory/test.csv",
header = TRUE,
quote="\"",
stringsAsFactors= TRUE,
strip.white = TRUE)
#Assigns the values from the stress column to a vector
stress <- test_file$stress[2:176]
#Assigns the values from the strain column to a vector
strain <- test_file$strain[2:176]
#Plotting the stress and strain, I only inlcluded the first 175 points
#so that you can see where the curve starts to
#bend as shown in the example picture.
plot(strain, stress, main='Stress v Strain', xlab='Strain (in/in)', ylab='Stress (PSI)')
#-------------Get Slope Function Section---------------------#
#get.slope function returns the slope of the passed in values
get.slope<-function(stress,strain){
LinearFit<- lm(stress~strain)
Slope <- summary(LinearFit)$coefficients[2, 1]
}
#calls function to fit first degree polynomial equation,
#notice that only the first 100 points are used where the curve is
#still fairly linear:
modulus<-get.slope(stress[1:100],strain[1:100])
LinearFit <- lm(stress~strain)
print(summary(LinearFit))
Это то, что сюжет должен вывести:
А где красный X является тот момент, что я пытаюсь оценить.
Спасибо!
Теперь я добавил код на исходное сообщение. – fR3ZNO
Хорошо, я написал гораздо меньшую версию кода, которая иллюстрирует то, что у меня есть до сих пор. Все, что вам нужно сделать, это загрузить файл csv, чтобы вы могли прочитать его с помощью r-скрипта. – fR3ZNO
Awesome. Благодаря!Итак, B - вектор длины 2, первым значением является х-перехват, а второе значение - перехват y? – fR3ZNO